Domanda

Ho bisogno di un modo per determinare il numero di giorni tra due date in SQL.

La risposta deve essere in ANSI SQL.

È stato utile?

Soluzione

ANSI SQL-92 definisce DATE - DATE come restituzione di un tipo INTERVAL. Dovresti essere in grado di estrarre gli scalari da INTERVALS usando lo stesso metodo di estrarli da DATEs usando & # 8211; abbastanza adeguatamente & # 8211; la funzione EXTRACT (4.5.3).

  

< estrai espressione > opera su   un datetime o intervallo e restituisce un   valore numerico esatto che rappresenta il   valore di un componente del datetime   o intervallo.

Tuttavia, questo è implementato molto male nella maggior parte dei database. Probabilmente sei bloccato usando qualcosa di specifico del database. DATEDIFF è abbastanza ben implementato su piattaforme diverse.

Ecco il " real " modo di farlo.

SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;

Buona fortuna!

Altri suggerimenti

Non ricordo di aver usato un RDBMS che non supportava DATE1-DATE2 e SQL 92 sembra concordare.

Credo che lo standard SQL-92 supporti la sottrazione di due date con l'operatore '-'.

SQL 92 supporta la sintassi seguente:

t.date_1 - t.date_2

Anche la funzione EXTRACT è ANSI, ma non è supportata su SQL Server. Esempio:

ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)

L'avvolgimento del calcolo in una funzione di valore assoluto garantisce che il valore risulti positivo, anche se una data più piccola è la prima data.

EXTRACT è supportato su:

  • Oracle 9i +
  • MySQL
  • Postgres
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top