Oracle
 sql >> Database >  >> RDS >> Oracle

Confronto di data e ora sql da doppia tabella

Ok, penso di averti preso. Vuoi fare quanto segue?

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

È abbastanza insolito preoccuparsi dei millisecondi, ma se lo fai dovresti usare systimestamp .

A giudicare dal fatto che hai diviso data e ora, questi sono caratteri, quindi dovrò indovinare il maschere di formato . Se hanno torto, il link dovrebbe guidarti su cosa fare. Non è saggio, comunque, dividere una data in questo modo. Puoi creare una colonna usando il timestamp tipo di dati nella tabella, il che renderebbe il tuo problema estremamente semplice.

Quindi, non so perché hai scelto il 'Day' formato per la tua query ma utilizzando quel <some date> diventa to_char(sysdate, 'DAY') .

Dal tuo commento qui sotto <some date> sarebbe to_char(sysdate, 'DD-MON-YY')

<some time> sarebbe to_char(systimestamp,'HH24:MI:SS:FF3') , che ti darebbe il timestamp al millisecondo, anche se il tipo di dati può andare al microsecondo.

Mi sembra un po' strano ma la tua domanda diventerebbe:

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

Sarebbe più normale, se si memorizza una data come stringa, memorizzarla nel formato yyyymmdd quindi almeno puoi garantire che sia in ordine. Se hai fatto qualcosa del genere, cambia semplicemente la maschera del formato. In caso contrario, queste query non funzioneranno come previsto.

Personalmente, se hai per memorizzare i dati in questo modo e assumendo state_date viene memorizzato, ad esempio, come dd-mon-yy , ovvero includendo anno, mese E giorno e state_time è memorizzato come indicato sopra, quindi farei qualcosa del genere:

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

Rende molto più ovvio cosa sta succedendo e non c'è ambiguità su cosa < significa che in questa situazione una data sarà sempre inferiore a una data futura, il che non vale necessariamente per le stringhe.

Spero che questo abbia senso.