2009-11-25 91 views

Respuesta

6

ANSI SQL-92 define FECHA - FECHA como devolver un tipo de intervalo. Se supone que usted puede extraer escalares de INTERVALOS utilizando el mismo método que para extraerlos de FECHAS usando – apropiadamente – la función EXTRAER (4.5.3).

< expresión extracto > opera en una fecha y hora 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á la forma "real" de hacerlo.

SELECT EXTRACT(DAY FROM DATE('2009-01-01') - DATE('2009-05-05')) FROM DUAL; 

¡Buena suerte!

1

Creo que el estándar SQL-92 admite restar dos fechas con el operador '-'.

3

No recuerdo haber usado un RDBMS que no admitía DATE1-DATE2 y SQL 92 parece estar de acuerdo.

0

SQL 92 es compatible con la siguiente sintaxis:

t.date_1 - t.date_2 

La función de extracción es también ANSI, pero no es compatible con SQL Server. Ejemplo:

ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2) 

Envolver el cálculo en una función de valor absoluto asegura el valor saldrá como positiva, incluso si una fecha más pequeña es la primera fecha.

extracto se admite en:

  • Oracle 9i +
  • MySQL
  • Postgres
+2

Si EXTRAE del FECHA antes de la resta, el cálculo solo funciona si las dos fechas están en el mismo mes. –

+0

Además de EXTRAER, el servidor MS SQL tampoco admite el restar operador entre dos fechas. "La fecha del tipo de datos del operando no es válida para restar el operador". – chugadie

Cuestiones relacionadas