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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top