Numero di giorni tra due date: ANSI SQL
-
05-07-2019 - |
Domanda
Ho bisogno di un modo per determinare il numero di giorni tra due date in SQL.
La risposta deve essere in ANSI SQL.
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