In diesem Referat stellt man die wichtigsten Datum- und Zeitfunktionen in SQL dar.
1. 1. Datum und Zeit als Typ in SQL
Datum und Zeit werden in SQL als ein spezifischer Typ behandelt. Um ein Beispiel zu zeigen, können wir mit den folgenden Funktionen die aktuelle Zeit erstellen.
NOW() |
Die Zeit, an der die Ausführung der ganzen Anweisung anfängt, wird gezeigt. |
CURRENT_TIMESTAMP() |
|
LOCALTIME() |
|
LOCALTIMESTAMP() |
|
SYSDATE() |
Die Zeit, an der die Funktion ausgeführt wird. |
NOW(), CURRENT_TIMESTAMP(), LOCALTIME() und LOCALTIMESTAMP() sind Synonyma, während SYSDATE() etwa unterschiedlich ist. Den Unterschied zwischen NOW() und SYSDATE() kann man mit der Funktion SLEEP() darstellen, durch die die Ausführung von Funktionen verschoben werden kann.
vgl.:
Durch die Funktion SLEEP(3) wird eine 3 Sekunden Pause gemacht. Aber der Unterschied wird nicht bei NOW() gezeigt, denn die Funktion stellt dar, wann die Ausführung der ganzen Anweisung angefangen hat.
2. 2. Datum und Zeit zeigen
DATE(expr) |
Datum zeigen |
TIME(expr) |
Zeit zeigen |
(expr bedeutet "expression" hier)
Funktionen in Bezug auf das Zeigen des Datums:
Tag |
DAYOFWEEK(date) |
Die Nummer des Wochentages (Die Numerierung basiert auf „the ODBC standard“, d.h. 1 = Sonntag, 2 = Montag, ..., 7 = Samstag) |
DAYNAME(date) |
Der Wochentag |
|
DAY()/DAYOFMONTH(date) |
Der Tag im Monat |
|
DAYOFYEAR(date) |
Der Tag im Jahr |
|
Woche |
WEEK(date) |
Die Nummer der Woche im Jahr |
Monat |
MONTH(date) |
Die Nummer des Monats im Jahr |
MONTHNAME(date) |
Der Name des Monats im Jahr |
|
Jahr |
YEAR(date) |
Das Jahr |
Funktionen in Bezug auf das Zeigen der Zeit:
HOUR(time) |
Die Stunde |
MINUTE(time) |
Die Minute |
SECOND(time) |
Die Sekunde |
MICROSECOND(time) |
Die Mikrosekunde |
Mit der Funktion EXTRACT(unit FROM date) kann man einen Teil des Datums herausziehen:
- Dasjenige, das herausgezogen wird, muss ein kontinuierlicher Teil des Datums sein, d.h. bei der Anweisung DAY_MICROSECOND werden Tag, Stunde, Minute, Sekunde und Mikrosekunde statt nur Tag und Mikrosekunde gezeigt.
- In SQL sind ausschließlich die folgenden Werte für unit ausführbar. Anweisungen mit unausführbaren unit wie SELECT EXTRACT(YEAR_DAY FROM "1879-3-14 1:59:26.535897") werden in SQL nicht erlaubt.
Tabelle 1: alle mögliche Werte für unit
MICROSECOND |
SECOND_MICROSECOND |
SECOND |
MINUTE_MICROSECOND |
MINUTE |
MINUTE_SECOND |
HOUR |
HOUR_MICROSECOND |
DAY |
HOUR_SECOND |
WEEK |
HOUR_MINUTE |
MONTH |
DAY_MICROSECOND |
QUARTER |
DAY_SECOND |
YEAR |
DAY_MINUTE |
|
DAY_HOUR |
|
YEAR_MONTH |
(Quelle: MySQL - 12.7 Date and Time Functions)
3. 3. Datum und Zeit berechnen
Funktionen, mit denen man Datum und Zeit berechnen kann:
ADDDATE(date, INTERVAL expr unit) /DATE_ADD(date, INTERVAL expr unit) |
Datums und Zeitwerte addieren |
SUBDATE(date, INTERVAL expr unit) /DATE_SUB(date, INTERVAL expr unit) |
Datums und Zeitwerte subtrahieren |
- Alle mögliche Werte für unit und die Formate des entsprechenden expr werden in der folgenden Tabelle dargestellt (ähnlich wie Tabelle 1, s.o.).
- Wenn unit DAY ist, kann man „INTERVAL n DAY“ als „n“ vereinfachen.
- expr kann negativ sein.
Tabelle 2: Alle mögliche Werte für unit und die Formate des entsprechenden expr
unit Value |
Expected expr Format |
MICROSECOND |
MICROSECONDS |
SECOND |
SECONDS |
MINUTE |
MINUTES |
HOUR |
HOURS |
DAY |
DAYS |
WEEK |
WEEKS |
MONTH |
MONTHS |
QUARTER |
QUARTERS |
YEAR |
YEARS |
SECOND_MICROSECOND |
'SECONDS.MICROSECONDS' |
MINUTE_MICROSECOND |
'MINUTES:SECONDS.MICROSECONDS' |
MINUTE_SECOND |
'MINUTES:SECONDS' |
HOUR_MICROSECOND |
'HOURS:MINUTES:SECONDS.MICROSECONDS' |
HOUR_SECOND |
'HOURS:MINUTES:SECONDS' |
HOUR_MINUTE |
'HOURS:MINUTES' |
DAY_MICROSECOND |
'DAYS HOURS:MINUTES:SECONDS.MICROSECONDS' |
DAY_SECOND |
'DAYS HOURS:MINUTES:SECONDS' |
DAY_MINUTE |
'DAYS HOURS:MINUTES' |
DAY_HOUR |
'DAYS HOURS' |
YEAR_MONTH |
'YEARS-MONTHS' |
(Quelle: MySQL - 12.7 Date and Time Functions)
Funktionen, mit denen man vor allem Zeit berechnen kann:
ADDTIME(expr1, expr2) |
Zeitwerte addieren |
SUBTIME(expr1, expr2) |
Zeitwerte subtrahieren |
- expr1 kann entweder Datumswert oder Zeitwert sein.
- Bei expr2 soll es keine Monatsanzahl geben. Anweisungen wie SUBTIME("3:14:15.926535", "2-7 18:28:18.284590") wird zu unerwarteten Ergebnissen führen.
- Beide expr1 und expr2 können negativ sein.
4. 4. Zeiträume berechnen
DATEDIFF(expr1, expr2) |
Zwei Daten voneinander subtrahieren |
- Die Funktion subtrahiert expr2 von expr1, d.h. expr1 - expr2. Das Ergebnis kann negativ sein.
- Nur die Daten (Jahr, Monat, Tag) werden berechnet, ohne dass die anderen Teile (Stunde, Minute, Sekunde, Mikrosekunde) berücksichtigt zu werden.
TIMEDIFF(expr1, expr2) |
Zwei Zeitpunkte voneinander subtrahieren |
- Die Funktion subtrahiert expr2 von expr1, d.h. expr1 - expr2. Das Ergebnis kann negativ sein.
- Im Ergebnis wird kein Datum gezeigt. Alles wird in Stunden umgerechnet.
TIMESTAMPDIFF(unit, expr1, expr2) |
Zeitintervall subtrahieren |
- Alle mögliche Werte von unit sind MICROSECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR.
- Im Vergleich zu TIMEDIFF, TIMESTAMPDIFF subtrahiert TIMESTAMPDIFF(expr1, expr2) expr1 von expr2, d.h. expr2 - expr1. Das Ergebnis kann negativ sein.
- Das Ergebnis wird auf ganze Zahl abgerundet, z.B. 59.999999 Sekunden werden 0 Minute umgerechnet.
- expr1 und expr2 dürfen Daten ohne Zeit sein. Gegebenfalls kann Datum wie „1879-3-14“ als „1879-3-14 00:00:00“ betrachtet werden.
5. 5. Literatur
Stephan Lücke, Christian Riepl, Caroline Trautmann: Korpus im Text
MySQL 5.7 Reference Manual: Date and Time Functions