Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Comparação de data e hora do SQL da tabela dupla


Ok, acho que te peguei. Você quer fazer o seguinte?
select <columns>
  from my_table
 where state_date <= <some date>
   and state_time <= <some time>

É bastante incomum se preocupar com os milissegundos, mas se você fizer isso, use systimestamp .

A julgar pelo fato de você ter dividido data e hora, esses são caracteres, então, vou ter que adivinhar o formatar máscaras . Se eles estiverem errados, o link deve orientá-lo sobre o que fazer. A propósito, não é sábio dividir uma data dessa maneira. Você pode criar uma coluna usando o timestamp data-type em sua tabela, o que tornaria seu problema extremamente simples.

Então, não sei por que você escolheu o 'Day' formato para sua consulta, mas indo com esse <some date> torna-se to_char(sysdate, 'DAY') .

Do seu comentário abaixo <some date> seria to_char(sysdate, 'DD-MON-YY')

<some time> seria to_char(systimestamp,'HH24:MI:SS:FF3') , que forneceria o carimbo de data/hora em milissegundos, embora o tipo de dados possa ir para o microssegundo.

Parece um pouco estranho para mim, mas sua consulta se tornaria:
select <columns>
  from my_table
 where state_date <= to_char(sysdate, 'DD-MON-YY')
   and state_time <= to_char(systimestamp,'HH24:MI:SS:FF3')

Seria mais normal, se armazenar uma data como uma string, armazená-la no formato yyyymmdd então pelo menos você pode garantir que está em ordem. Se você fez algo assim, basta alterar a máscara de formato. Se você não tiver feito isso, essas consultas não funcionarão conforme o esperado.

Pessoalmente, se você tem para armazenar dados dessa maneira e assumindo state_date é armazenado como, digamos, dd-mon-yy , ou seja, incluindo ano, mês E dia e state_time é armazenado como indicado acima, então eu faria algo assim:
select <columns>
  from my_table
 where to_timestamp(state_date || state_time, 'DD-MON-YYHH24:MI:SS:FF3')
        <= systimestamp

Isso torna muito mais óbvio o que está acontecendo e não há ambiguidade sobre o que < significa nesta situação como uma data sempre será menor que uma data futura, o que não necessariamente vale para strings.

Espero que isto faça sentido.