Oracle SQL clausola Where contro una colonna di data
-
28-09-2019 - |
Domanda
Ho una colonna DATE con una data in essa, ma ho bisogno di interrogare a trovare i record meno di 30 giorni di età.
START_DATE
----------
01-AUG-2010
09-AUG-2010
22-AUG-2010
09-SEP-2010
Domanda:
SELECT START_DATE
WHERE START_DATE < 30;
Lo so che è semplice query in SQL ORACLE ma sto facendo qualcosa di sbagliato.
Soluzione
dove START_DATE> SYSDATE - 1
o forse
dove TRIM (STARTDATE)> TRIM (SYSDATE) - 1
Altri suggerimenti
Usa:
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - 30
-
SYSDATE
è la sintassi di Oracle per ottenere la data e l'ora correnti - In Oracle, si può fare aritmetica delle date nel contesto di giorni, in modo da SYSDATE - 30 significa "data corrente, sottrarre trenta giorni" per ottenere una data che è di trenta giorni nel passato
Se si desidera valutare la data sulla base di trenta giorni a partire dalla mezzanotte, utilizzare la funzione TRUNC :
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > TRUNC(SYSDATE) - 30
Non eseguire TRUNC sulla colonna -. Che renderà un indice sulla colonna inutile, garantendo una scansione di tabella
SELECT t.start_date
FROM YOUR_TABLE t
WHERE t.start_date > SYSDATE - INTERVAL '30' DAY;
INTERVAL
è più portabile di partendo dal presupposto che è possibile aggiungere o sottrarre giorni, anche se ho notato alcune leggere differenze nella sintassi INTERVAL
tra Oracle e PostgreSQL.