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

confronta la data nel comando sql

No. Data/ora non ha alcun formato . Oracle non memorizza la data/i timestamp nel formato che vedi. Il formato che vedi è solo per la visualizzazione scopo. La data è memorizzata internamente in 7 byte, che è il formato proprietario di Oracle .

Certo che potresti. Potresti usare TRUNC che tronca la parte di tempo e lascia solo la parte di data e il tipo di dati rimane come data.

Ad esempio,

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

MY_TMSTMP
----------
2015-05-29

Quindi, ottieni l'input dell'utente in quel formato come una stringa . Devi prima convertire in DATE utilizzando TO_DATE e poi confrontalo.

Ad esempio,

WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')

Come ho già detto, se vuoi ignorare la parte temporale, applica TRUNC .

Tuttavia, applicando TRUNC alla data colonna sopprimerebbe qualsiasi indice regolare su quella colonna. Dal punto di vista delle prestazioni, è meglio utilizzare una condizione dell'intervallo di date .

Ad esempio,

WHERE dt_column
BETWEEN 
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
AND     
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1