Funktion DATEDIFF - Amazon Redshift

Funktion DATEDIFF

DATEDIFF gibt die Differenz zwischen den Datumsteilen zweier Datums- oder Uhrzeitausdrücke aus.

Syntax

DATEDIFF ( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )

Argumente

datepart

Der spezifische Teil des Datums- oder Zeitwerts (Jahr, Monat oder Tag, Stunde, Minute, Sekunde, Millisekunde oder Mikrosekunde) auf den die Funktion angewendet wird. Weitere Informationen finden Sie unter Datumsteile für Datums- oder Zeitstempelfunktionen.

Insbesondere bestimmt DATEDIFF die Anzahl von Datumsteilgrenzen, die zwischen zwei Ausdrücken überschritten werden. Nehmen wir an, dass Sie den Jahresdifferenz zwischen zwei Daten berechnen möchten, 12-31-2008 und 01-01-2009. In diesem Fall gibt die Funktion 1 Jahr zurück, obwohl die Daten nur einen Tag auseinanderliegen. Wenn Sie die Differenz in Stunden zwischen zwei Zeitstempeln, 01-01-2009 8:30:00 und 01-01-2009 10:00:00 ermitteln, ist das Ergebnis 2 Stunden. Wenn Sie die Differenz in Stunden zwischen zwei Zeitstempeln, 8:30:00 und 10:00:00 ermitteln, ist das Ergebnis 2 Stunden.

date|time|timetz|timestamp

Eine DATE-, TIME-, TIMETZ- oder TIMESTAMP-Spalte bzw. ein entsprechender Ausdruck, die/der implizit zu einem DATE, TIME, TIMETZ oder TIMESTAMP konvertiert wird. Beide Ausdrücke müssen den angegebenen Datums- oder Zeitteil enthalten. Wenn das zweite Datum bzw. die zweite Uhrzeit größer als das/die erste ist, ist das Ergebnis positiv. Wenn das zweite Datum bzw. die zweite Uhrzeit vor dem/der ersten liegt, ist das Ergebnis negativ.

Rückgabetyp

BIGINT

Beispiele mit einer DATE-Spalte

Im folgenden Beispiel wird die Differenz als Anzahl von Wochen zwischen zwei Literal-Datumswerten berechnet.

select datediff(week,'2009-01-01','2009-12-31') as numweeks; numweeks ---------- 52 (1 row)

Im folgenden Beispiel wird die Differenz als Anzahl von Quartalen zwischen einem in der Vergangenheit liegenden Literalwert und dem heutigen Datum berechnet. Bei diesem Beispiel wird davon ausgegangen, dass das aktuelle Datum der 5. Juni 2008 ist. Sie können Datumsteile ausschreiben oder abkürzen. Der Standard-Spaltenname für die DATEDIFF-Funktion ist DATE_DIFF.

select datediff(qtr, '1998-07-01', current_date); date_diff ----------- 40 (1 row)

Das folgende Beispiel verbindet die Tabellen SALES und LISTING zur Berechnung, wie viel Tage nach ihrer Auflistung Tickets für die Auflistungen 1000 bis 1005 verkauft wurden. Die längste Wartezeit für den Verkauf dieser Auflistungen betrug 15 Tage, und die kürzeste lag unter einem Tag (0 Tage).

select priceperticket, datediff(day, listtime, saletime) as wait from sales, listing where sales.listid = listing.listid and sales.listid between 1000 and 1005 order by wait desc, priceperticket desc; priceperticket | wait ---------------+------ 96.00 | 15 123.00 | 11 131.00 | 9 123.00 | 6 129.00 | 4 96.00 | 4 96.00 | 0 (7 rows)

Dieses Beispiel berechnet die durchschnittliche Zahl von Stunden, für die Verkäufer auf alle Ticketverkäufe warteten.

select avg(datediff(hours, listtime, saletime)) as avgwait from sales, listing where sales.listid = listing.listid; avgwait --------- 465 (1 row)

Beispiele mit einer TIME-Spalte

Die folgende Beispieltabelle TIME_TEST enthält eine Spalte TIME_VAL (Typ TIME) mit drei eingefügten Werten.

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

Im folgenden Beispiel wird die Differenz als Anzahl von Stunden zwischen der TIME_VAL-Spalte und einem Zeitliteral berechnet.

select datediff(hour, time_val, time '15:24:45') from time_test; date_diff ----------- -5 15 15

Im folgenden Beispiel wird die Differenz als Anzahl von Minuten zwischen zwei Literal-Zeitwerten berechnet.

select datediff(minute, time '20:00:00', time '21:00:00') as nummins; nummins ---------- 60

Beispiele mit einer TIMETZ-Spalte

Die folgende Beispieltabelle TIMETZ_TEST enthält eine Spalte TIMETZ_VAL (Typ TIMETZ) mit drei eingefügten Werten.

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

Im folgenden Beispiel werden die Differenzen als Anzahl von Stunden zwischen dem TIMETZ-Literal und timetz_val berechnet.

select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test; numhours ---------- 0 -4 1

Im folgenden Beispiel wird die Differenz als Anzahl von Stunden zwischen zwei Literal-TIMETZ-Werten berechnet.

select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours; numhours ---------- 1