sql >> Base de Datos >  >> RDS >> Oracle

Comparación de fecha y hora sql de tabla dual

Está bien, creo que te tengo. ¿Quieres hacer lo siguiente?

select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

Es bastante inusual preocuparse por los milisegundos, pero si lo hace, debe usar systimestamp .

A juzgar por el hecho de que dividió la fecha y la hora, estos son caracteres, así que tendré que adivinar el máscaras de formato . Si están equivocados, el enlace debería guiarlo sobre qué hacer. Por cierto, no es prudente dividir una fecha de esta manera. Podrías crear una columna usando la timestamp tipo de datos en su tabla, lo que haría que su problema sea extremadamente simple.

Entonces, no sé por qué has elegido el 'Day' formato para su consulta pero va con ese <some date> se convierte en to_char(sysdate, 'DAY') .

De su comentario a continuación <some date> sería to_char(sysdate, 'DD-MON-YY')

<some time> sería to_char(systimestamp,'HH24:MI:SS:FF3') , lo que le daría la marca de tiempo en milisegundos, aunque el tipo de datos puede ir en microsegundos.

Me parece un poco extraño, pero su consulta se convertiría en:

select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Sería más normal, si almacena una fecha como una cadena, almacenarla en el formato yyyymmdd así al menos puedes garantizar que está en orden. Si ha hecho algo como esto, simplemente cambie la máscara de formato. Si no lo ha hecho, estas consultas no funcionarán según lo previsto.

Personalmente, si tiene para almacenar datos de esta manera y asumiendo state_date se almacena como, digamos, dd-mon-yy , es decir, incluye año, mes Y día, y state_time se almacena como se indica arriba, entonces haría algo como esto:

select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Hace mucho más obvio lo que está pasando y no hay ambigüedad sobre qué < significa que en esta situación, una fecha siempre será menor que una fecha futura, lo que no necesariamente es cierto para las cadenas.

Espero que esto tenga sentido.