Tengo un datetime columna en Oracle (MM/DD/AAAA HH:MM:SS AM/PM) pero cuando hago esto:

SELECT MAX(D_DTM)-1 FROM tbl1

…va de nuevo un día. ¿Cómo puedo eliminar una hora de la columna en lugar de un día?

También he notado que el datetime registros para 12AM aspecto MM/DD/AAAA y no MM/DD/AAAA 00:00:00; no estoy seguro de si lo que importa.

¿Cómo estás viendo el 12AM valores? Es a través de la SQLPlus o un front-end (lenguaje C#, PHP, etc., etc.)?
el uso de Sapo, es el extremo delantero de la cuestión? Soy nuevo en el Oracle env
Podría ser un SAPO cosa, pero no estoy familiarizado con el SAPO. Si todas las otras fechas en la columna muestra el tiempo y el componente de la «medianoche», las fechas no se, creo que es seguro asumir que la «medianoche» es la que realmente existe y el SAPO es sólo «amablemente» ocultar. Puede que haya una configuración donde se puede activar o desactivar, pero eso es sólo una conjetura. Yo sé que la .NET languages y PHP reconocer la porción de tiempo – incluso si es cero y, probablemente, casi todos los otros idiomas también.

OriginalEl autor lightweight | 2013-04-18

6 Comentarios

  1. 16

    Randy respuesta es bueno, pero también puede utilizar intervalos:

    SELECT MAX(D_DTM)- interval '1' hour FROM tbl1
    la mejor respuesta de la OMI, la más clara para el futuro de los codificadores para saber que pasa

    OriginalEl autor A.B.Cade

  2. 6

    O utilizar el INTERVAL función. Tiene el mismo resultado, pero creo que se lee más claramente – claro que esto es sólo una opinión 🙂

    SELECT MAX(D_DTM) - INTERVAL '1' HOUR FROM tbl1

    La cosa agradable sobre la INTERVAL función es que puede hacer que el intervalo de años, meses, días, horas, minutos o segundos cuando se trata de un DATE valor, a pesar de que el mes de intervalo puede ser complicado cuando se trata con el fin-de-mes fecha.

    Y sí, la cita alrededor de la 1 en el ejemplo se requiere.

    También puede utilizar los específicos de Oracle NumToDSInterval función, que es menos estándar, pero más flexible, porque acepta las variables en lugar de las constantes:

    SELECT MAX(D_DTM) - NUMTODSINTERVAL(1, 'HOUR') FROM tbl1

    OriginalEl autor Ed Gibbs

  3. 5

    sí – fechas de ir por entero de días.

    si quieres horas que necesita para hacer algo de matemáticas – como -(1/24)

    OriginalEl autor Randy

  4. 5
    select sysdate - numtodsinterval(1,'hour') from dual

    OriginalEl autor sakumar

  5. 2

    Otro método de uso de los intervalos de

    NUMTODSINTERVAL( number, expression )

    ejemplos

    NUMTODSINTERVAL(150, 'DAY')
    NUMTODSINTERVAL(1500, 'HOUR')
    NUMTODSINTERVAL(15000, 'MINUTE')
    NUMTODSINTERVAL(150000, 'SECOND')

    Menciono esto porque es útil para situaciones donde el uso del INTERVALO de no trabajo.

    OriginalEl autor Joe W

  6. 1

    Su sencillo.

    sysdate – 5/(24*60*60) –> Resta 5 segundos de systime

    sysdate – 5/(24*60) –> Resta a 5 minutos de systime

    sysdate – 5/(24) –> Resta 5 horas de systime

    Por lo tanto

    seleccione (sysdate – (1/24)) from dual

    Se puede ampliar un poco más en su respuesta, tales como la razón por la que usar la división para restar?
    La división es calcular el valor como una fracción de días. (1 hora es de 1/24 de un día, así que 5/24 días es de 5 horas). La resta resta del día. Personalmente, sin embargo, yo estaría preocupado de errores de punto flotante.
    La idea es que la información, como los que deben ser incluidos en la respuesta.

    OriginalEl autor Ankit Kachchhi

Dejar respuesta

Please enter your comment!
Please enter your name here