2009-11-25 11 views

Antwort

6

ANSI SQL-92 definiert DATE - Datum als INTERVAL Typ zurückkehrt. Sie sollten in der Lage sein, Skalare aus INTERVALS zu extrahieren, indem Sie dieselbe Methode verwenden, wie sie aus DATEs extrahiert werden, indem Sie die EXTRACT-Funktion (4.5.3) verwenden, die – entspricht.

< Extrakt Ausdruck > arbeitet auf ein DateTime- oder Intervall und gibt einen exakten numerischen Wert, der den Wert einer Komponente der Datumzeit oder Intervall.

Dies ist jedoch in den meisten Datenbanken sehr schlecht implementiert. Sie stecken wahrscheinlich fest, dass Sie etwas datenbankspezifisches verwenden. DATEDIFF ist auf verschiedenen Plattformen ziemlich gut implementiert.

Hier ist die "echte" Art, es zu tun.

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

Viel Glück!

1

Ich glaube, der SQL-92-Standard unterstützt das Subtrahieren zweier Daten mit dem Operator '-'.

3

Ich kann mich nicht erinnern, ein RDBMS zu verwenden, das DATE1-DATE2 nicht unterstützte und SQL 92 scheint zuzustimmen.

0

SQL 92 unterstützt die folgende Syntax:

t.date_1 - t.date_2 

Der Extrakt Funktion ANSI ist auch, ist aber nicht auf SQL Server unterstützt. Beispiel:

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

die Berechnung in einer Absolutwertfunktion Verpackung stellt sicher, der Wert wird als positiv herauskommen, auch wenn ein kleines Datum der erste Tag.

Extrakt wird auf unterstützt:

  • Oracle 9i +
  • MySQL
  • Postgres
+2

Wenn Sie vom Datum vor der Subtraktion EXTRACT, dann funktioniert die Berechnung nur, wenn die beiden Daten im selben Monat sind. –

+0

Zusätzlich zu EXTRACT unterstützt der MS SQL-Server auch keinen Subtraktionsoperator zwischen zwei Daten. "Das Datum des Operand-Datentyps ist für den Subtraktionsoperator ungültig." – chugadie