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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top