Nombre de jours entre deux dates - SQL ANSI
-
05-07-2019 - |
Question
J'ai besoin d'un moyen de déterminer le nombre de jours entre deux dates en SQL.
La réponse doit être en ANSI SQL.
La solution
ANSI SQL-92 définit DATE - DATE comme renvoyant un type INTERVAL. Vous êtes censé pouvoir extraire des scalaires d'INTERVALS en utilisant la même méthode que pour les extraire de DATE en utilisant & # 8211; de manière appropriée & # 8211; la fonction EXTRAIT (4.5.3).
< extraire l'expression > fonctionne sur un datetime ou un intervalle et retourne un valeur numérique exacte représentant le valeur d'un composant du datetime ou intervalle.
Cependant, cela est très mal implémenté dans la plupart des bases de données. Vous êtes probablement coincé en utilisant quelque chose de spécifique à la base de données. DATEDIFF est plutôt bien implémenté sur différentes plates-formes.
Voici le " vrai " manière de le faire.
SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;
Bonne chance!
Autres conseils
Je ne me souviens pas avoir utilisé un SGBDR qui ne prenait pas en charge DATE1-DATE2 et SQL 92 semble être d’accord.
Je pense que le standard SQL-92 prend en charge la soustraction de deux dates avec l'opérateur '-'.
SQL 92 prend en charge la syntaxe suivante:
t.date_1 - t.date_2
La fonction EXTRACT est également ANSI, mais elle n'est pas prise en charge sur SQL Server. Exemple:
ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)
Le calcul dans une valeur absolue garantit que la valeur sera positive, même si la première date est une date plus courte.
EXTRACT est pris en charge sur:
- Oracle 9i +
- MySQL
- Postgres