Cómo restar horas a partir de una fecha en Oracle por lo que afecta el día también

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 Kommentare

  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

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea