Pregunta

Necesito una forma de determinar el número de días entre dos fechas en SQL.

La respuesta debe estar en ANSI SQL.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top