Estoy tratando de restar la fecha de Oracle, por lo que incluso efecto el día así. Por ejemplo, si
la marca de tiempo es el 01/junio/2015 00 horas y si me restar 2 horas, quiero ser capaz de ir a 31/Mayo/2014 de 22 horas.

Traté de

to_char(sysdate-(2/11), 'MM-DD-YYYY HH24')

pero sólo resta la hora; no toque el mismo día.

¿Qué te hace pensar -(2/11) resta de 2 horas? No es un caso obvio de la notación. Parece que puede restar 0.22 unidades de algún tipo — me reservo el juicio sobre si días o segundos o alguna otra unidad.
en Oracle una expresión date_value - integer siempre significa date_value - number of days. Los valores fraccionarios se interpretan como horas. Sin embargo 2/11 es bastante ofuscado forma de definir el valor esperado. Yo personalmente siempre uso ANSI intervalo de literales para algo como que: sysdate - interval '2' hour
Gracias — que tenga sentido. La unidad básica de Oracle FECHA días y el tiempo es una fracción de un día. Mi memoria está podrido; 2/11 = 0.1818181818… y 2/9 = 0.2222222222… todavía no parece que 2/11 es una forma de especificar 2 horas aún así (es un poco más de 4 horas).

OriginalEl autor hi4ppl | 2015-06-11

4 Comentarios

  1. 37

    Otros han comentado sobre la (incorrecta) uso de 2/11 para especificar el intervalo deseado.

    Yo personalmente, sin embargo prefiero escribir cosas como que el uso de la norma ANSI interval literales que hace lectura la consulta mucho más fácil:

    sysdate - interval '2' hour

    También tiene la ventaja de ser portátil, muchos DBMS apoyar esto. Además de que no tienen que el fuego de una calculadora para averiguar cuántas horas a la expresión de los medios de que soy bastante malo con aritmética mental 😉

    OriginalEl autor a_horse_with_no_name

  2. 3

    Intente esto:

    SELECT to_char(sysdate - (2 / 24), 'MM-DD-YYYY HH24') FROM DUAL

    De ponerlo a prueba con una nueva instancia de fecha:

    SELECT to_char(TO_DATE('11/06/2015 00:00','dd/mm/yyyy HH24:MI') - (2 / 24), 'MM-DD-YYYY HH24:MI') FROM DUAL

    La salida es: 06-10-2015 22:00, que es el día anterior.

    OriginalEl autor m3nation

  3. 3

    sysdate-(2/11)

    Para restar horas de un FECHA, usted necesita para convertir el horas en días. Un día se compone de 24 hours, por lo que para convertir 2 hours en días, es necesario dividir por 24.

    Ahora, para restar 2 horas a partir de la fecha, hacer:

    DATE_value - 2/24

    Por ejemplo,

    SQL> SELECT TO_CHAR(
      2                 TO_DATE('01/Jun/2015 00:00:00', 'DD/Mon/YYYY HH24:MI:SS') - 2/24,
      3         'DD/Mon/YYYY HH24:MI:SS') dt
      4  FROM DUAL;
    
    DT
    --------------------
    31/May/2015 22:00:00
    
    SQL>

    OriginalEl autor Lalit Kumar B

  4. 1

    date - n le resta de n días, debido a la fecha. Con el fin de restar horas que usted necesita para convertirlo en día la compra de su división con 24. En su caso debe to_char(sysdate - (2 + 2/24), 'MM-DD-YYYY HH24'). Esto subract 2 días y 2 horas de sysdate.

    OriginalEl autor Tapan Pandya

Dejar respuesta

Please enter your comment!
Please enter your name here