Este es mi actual tabla de oracle:

  • FECHA = fecha
  • HORA = número de
  • RUN_DURATION = número de

oracle consulta entre dos fechas con horas

Necesito una consulta para obtener los RUN_DURATION entre dos fechas con horas como

Select * from Datatable where DATE BETWEEN to_date('myStartDate', 'dd/mm/yyyy hh24:mi:ss') + HOURS? and to_date('myEndDate', 'dd/mm/yyyy hh24:mi:ss') + HOURS?

Por ejemplo todos los datos entre 30.10.14 11:00:00 y 30.10.14 15:00:00

Me quedé para obtener las horas a las fechas. He intentado añadir las horas en myStartDate pero esto se tendrá en cuenta para la fecha de inicio debido a BETWEEN.
BETWEEN no debe ser utilizado para las fechas pero no puedo probar otras oportunidades porque no sé cómo conseguir DATE y HOUR juntos…
Gracias!

  • No hay absolutamente nada de malo con el uso de BETWEEN con las fechas. Está tratando de agregar el HOUR columna a la DATE columna? Su muy claro.
  • El problema aquí es la separación de las fechas a partir de las horas. Tendrás que combinarlos de nuevo para hacer la consulta, el uso de algo como (fecha + hora/24)
  • Necesito por ejemplo todos los datos de la fecha entre el 10.08.15 08:00 y 11.08.15 10:00
  • Las fechas en tu ejemplo, no tienen correlación con la captura de pantalla. Por favor, edita tu pregunta y explicar lo que se puede esperar de las filas de ejemplo se muestra en tu pregunta.
  • la tabla tiene millones de entradas y algunos otros campos. He hecho una consulta y actualiza la captura de pantalla, la esperanza, ahora que está claro. Por ejemplo necesito todos los datos entre 30.10.14 11:00:00 y 30.10.14 15:00:00, debe ser el resultado de las entradas con la HORA 12, 13 y 14
  • Si desea que los datos entre esas fechas… lo filas en el ejemplo se puede esperar para volver?

InformationsquelleAutor Kᴀτᴢ | 2015-08-14

4 Comentarios

  1. 5

    Un FECHA tiene tanto la fecha y hora de elementos. Agregar horas a la fecha, sólo necesita hacer algo de matemáticas.

    Por ejemplo,

    SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
    
    Session altered.
    
    SQL> SELECT SYSDATE, SYSDATE + 1/24 FROM dual;
    
    SYSDATE             SYSDATE+1/24
    ------------------- -------------------
    2015-08-14 15:02:59 2015-08-14 16:02:59

    Añade 1 hora a sysdate. Por lo tanto, si usted tiene una columna de tipo de datos de fecha, sólo tiene que añadir número de horas para ser añadido dividido por 24 porque agrega número de días a una fecha. Por lo tanto, sólo necesidad de convertir el número de horas de la fecha de hours/24.

    • gracias por la explicación, voy a probarlo
  2. 4

    Bien, puede agregar horas a su campo de fecha de este modo

    select "DATE" + (hour / 24) from <yourTable>

    esto le dará a usted ( a partir de la primera muestra, puede ser diferente dependiendo de su formato)

    August, 14 2015 10:00:00 
    August, 14 2015 08:00:00 

    Basado en esto, usted puede hacer entre, seleccione el que usted necesita.

    En su caso

    where "DATE" + (hour / 24 )

    que haría

    Select * 
    from Datatable 
    where "DATE" + (hour / 24 )
     BETWEEN to_date('30/10/2014 11:00:00', 'dd/mm/yyyy hh24:mi:ss')  and            
             to_date('30/10/2014 15:00:00', 'dd/mm/yyyy hh24:mi:ss') 

    ver SqlFiddle

    (Por cierto, no uso de palabras clave reservadas para el nombre de la columna, pero supongo que este es solo un ejemplo).

    • Gracias, funciona muy bien. Gracias por la sugerencia con las palabras clave reservadas, es una tabla dada entonces no puedo cambiar el nombre. Me hizo cierta frustración con mi consulta en c# hasta que alguien me dijo que usara \"DATE\" para el campo
  3. 1

    Si quieres añadir min a date puede utilizar interval.

    select sysdate, sysdate + interval '1' hour from dual

    Así,

    Select * 
    from Datatable 
    where 
    DATE BETWEEN myStartDate + interval to_char(HOURS) hour 
    and myEndDate + interval to_char(HOURS) hour
    • gracias también funciona

Dejar respuesta

Please enter your comment!
Please enter your name here