Número de días entre dos fechas: ANSI SQL
-
05-07-2019 - |
Pregunta
Necesito una forma de determinar el número de días entre dos fechas en SQL.
La respuesta debe estar en ANSI SQL.
Solución
ANSI SQL-92 define DATE - DATE como devolver un tipo de INTERVALO. Se supone que puede extraer escalares de INTERVALOS utilizando el mismo método que extraerlos de FECHAS utilizando & # 8211; lo suficientemente apropiado & # 8211; la función EXTRACT (4.5.3).
< extraer expresión > opera en un datetime o intervalo y devuelve un valor numérico exacto que representa el valor de un componente de la fecha y hora o intervalo.
Sin embargo, esto está muy mal implementado en la mayoría de las bases de datos. Probablemente estés atrapado usando algo específico de la base de datos. DATEDIFF está bastante bien implementado en diferentes plataformas.
Aquí está el " real " forma de hacerlo.
SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;
¡Buena suerte!
Otros consejos
No recuerdo haber usado un RDBMS que no admitía DATE1-DATE2 y SQL 92 parece estar de acuerdo.
Creo que el estándar SQL-92 admite restar dos fechas con el operador '-'.
SQL 92 admite la siguiente sintaxis:
t.date_1 - t.date_2
La función EXTRACT también es ANSI, pero no es compatible con SQL Server. Ejemplo:
ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)
Ajustar el cálculo en una función de valor absoluto asegura que el valor saldrá como positivo, incluso si una fecha más pequeña es la primera fecha.
EXTRACT es compatible con:
- Oracle 9i +
- MySQL
- Postgres