MySQL 5.1 Referenzhandbuch :: 12 Funktionen für die Benutzung in SELECT- und WHERE-Klauseln :: 12.5 Datums- und Zeitfunktionen « 12.4.2 Mathematische Funktionen


12.6 Welchen Kalender benutzt MySQL? »Section Navigation[Toggle]

12.5. Datums- und Zeitfunktionen

Dieser Abschnitt beschreibt die Funktionen, die zur Manipulation von zeitbezogenen Werten verwendet werden können. Eine Beschreibung der Wertebereiche für Datums- und Uhrzeittypen und der gültigen Formate, in denen Werte angegeben werden können, finden Sie in Abschnitt 11.3, „Datums- und Zeittypen“.

Es folgt ein Beispiel, welches Datumsfunktionen verwendet. Die folgende Abfrage wählt alle Datensätze aus, die einen date_col-Wert haben, der in den letzten 30 Tagen liegt:

mysql> SELECT something FROM tbl_name
    -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col;

Beachten Sie, dass die Abfrage auch Datensätze mit Daten auswählt, die in der Zukunft liegen.

Funktionen, die Datumswerte erwarten, akzeptieren normalerweise auch DATETIME-Werte und ignorieren dabei den Uhrzeitbestandteil. Ähnlich akzeptieren Funktionen, die Zeitwerte erwarten, normalerweise auch DATETIME-Werte und ignorieren den Datumsbestandteil.

Funktionen, die das aktuelle Datum oder die Uhrzeit zurückgeben, werden nur einmal pro Abfrage ausgewertet, nämlich beim Start der Abfrageausführung. Das bedeutet, dass mehrere Referenzierungen einer Funktion wie NOW() in einer Abfrage immer zum selben Ergebnis führen (für unsere Zwecke enthält eine einzelne Abfrage auch einen Aufruf einer gespeicherten Routine oder eines Triggers sowie alle Subroutinen, die von dieser Routine oder diesem Trigger aufgerufen werden). Dieses Prinzip gilt auch für CURDATE(), CURTIME(), UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP() und für alle zugehörigen Synonyme.

Die Funktionen CURRENT_TIMESTAMP(), CURRENT_TIME(), CURRENT_DATE() und FROM_UNIXTIME() geben Werte in der aktuellen Zeitzone der Verbindung zurück, die als Wert der Systemvariablen time_zone verfügbar ist. Ferner setzt UNIX_TIMESTAMP() voraus, dass sein Argument ein DATETIME-Wert in der aktuellen Zeitzone ist. Siehe auch Abschnitt 5.11.8, „Zeitzonen-Unterstützung des MySQL-Servers“.

Einige Datumsfunktionen können mit „Nulldaten“ oder unvollständigen Daten wie '2001-11-00' verwendet werden, während dies bei anderen nicht möglich ist. Funktionen, die Teile von Datumsangaben extrahieren, arbeiten meist auch mit unvollständigen Daten. Zum Beispiel:

mysql> SELECT DAYOFMONTH('2001-11-00'), MONTH('2005-00-00');
        -> 0, 0

Andere Funktionen erwarten vollständige Daten und geben NULL zurück, wenn unvollständige Daten übergeben werden. Hierzu gehören Funktionen, die Datumsberechnungen durchführen oder Teile von Datumsangaben Namen zuordnen. Zum Beispiel:

mysql> SELECT DATE_ADD('2006-05-00',INTERVAL 1 DAY);
        -> NULL
mysql> SELECT DAYNAME('2006-05-00');
        -> NULL
  • ADDDATE(date,INTERVAL expr type), ADDDATE(expr,days) Wenn mit der Form INTERVAL für das zweite Argument aufgerufen, ist ADDDATE() ein Synonym von DATE_ADD(). Die zugehörige Funktion SUBDATE() ist ein Synonym für DATE_SUB(). Weitere Informationen zum Argument INTERVAL finden Sie in der Beschreibung zu DATE_ADD(). mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY); -> ‚1998-02-02‘ mysql> SELECT ADDDATE('1998-01-02', INTERVAL 31 DAY); -> ‚1998-02-02‘ Wenn mit der Form days für das zweite Argument aufgerufen, wird es von MySQL als ganzzahlige Anzahl von Tagen behandelt, die expr hinzugefügt wird. mysql> SELECT ADDDATE('1998-01-02', 31); -> ‚1998-02-02‘
  • ADDTIME(expr,expr2) ADDTIME() fügt expr2 expr hinzu und gibt das Ergebnis zurück. expr ist eine Zeitangabe oder ein DATETIME-Wert, expr2 eine Zeitangabe. mysql> SELECT ADDTIME('1997-12-31 23:59:59.999999', -> '1 1:1:1.000002'); -> ‚1998-01-02 01:01:01.000001‘ mysql> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998'); -> ’03:00:01.999997′
  • CONVERT_TZ(dt,from_tz,to_tz) CONVERT_TZ() wandelt einen DATETIME-Wert dt von der angegebenen Ausgangszeitzone from_tz in die Zielzeitzone to_tz um und gibt das Ergebnis zurück. Zeitzonen werden wie in Abschnitt 5.11.8, „Zeitzonen-Unterstützung des MySQL-Servers“, beschrieben angegeben. Die Funktion gibt NULL zurück, wenn die Argumente ungültig sind. Fiele der Wert durch die Konvertierung aus from_tz in UTC außerhalb des vom Typ TIMESTAMP unterstützten Bereichs, dann erfolgt keine Konvertierung. Der für TIMESTAMP gültige Bereich ist in Abschnitt 11.1.2, „Überblick über Datums- und Zeittypen“, beschrieben. mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','GMT','MET'); -> ‚2004-01-01 13:00:00‘ mysql> SELECT CONVERT_TZ('2004-01-01 12:00:00','+00:00','+10:00'); -> ‚2004-01-01 22:00:00‘ Hinweis: Wenn Sie benannte Zeitzonen wie 'MET' oder 'Europe/Moscow' verwenden wollen, müssen die Zeitzonentabellen korrekt konfiguriert sein. Eine Anleitung finden Sie in Abschnitt 5.11.8, „Zeitzonen-Unterstützung des MySQL-Servers“.
  • CURDATE() Gibt das aktuelle Datum als Wert in den Formaten 'YYYY-MM-DD' oder YYYYMMDD aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT CURDATE(); -> ‚1997-12-15‘ mysql> SELECT CURDATE() + 0; -> 19971215
  • CURRENT_DATE, CURRENT_DATE() CURRENT_DATE und CURRENT_DATE() sind Synonyme von CURDATE().
  • CURTIME() Gibt die aktuelle Uhrzeit als Wert in den Formaten 'HH:MM:SS' oder HHMMSS aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT CURTIME(); -> ’23:50:26′ mysql> SELECT CURTIME() + 0; -> 235026
  • CURRENT_TIME, CURRENT_TIME() CURRENT_TIME und CURRENT_TIME() sind Synonyme von CURTIME().
  • CURRENT_TIMESTAMP, CURRENT_TIMESTAMP() CURRENT_TIMESTAMP und CURRENT_TIMESTAMP() sind Synonyme von NOW().
  • DATE(expr) Extrahiert den Datumsteil aus dem DATE– oder DATETIME-Ausdruck expr. mysql> SELECT DATE('2003-12-31 01:02:03'); -> ‚2003-12-31‘
  • DATEDIFF(expr,expr2) DATEDIFF() gibt die Anzahl der Tage zwischen dem Startdatum expr und dem Enddatum expr2 zurück. expr und expr2 sind DATE– oder DATETIME-Ausdrücke. Nur die Datumsanteile der Werte werden in der Berechnung verwendet. mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30'); -> 1 mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31'); -> -31
  • DATE_ADD(date,INTERVAL expr type), DATE_SUB(date,INTERVAL expr type) Diese Funktionen führen Datumsberechnungen durch. date ist ein DATETIME– oder DATE-Wert, der das Startdatum angibt. expr ist ein Ausdruck, der den vom Startdatum hinzuzufügenden oder abzuziehenden Intervallwert angibt. expr ist dabei ein String und kann bei negativen Intervallen mit einem ‘-’ beginnen. type ist ein Schlüsselwort, das angibt, wie der Ausdruck zu interpretieren ist. Das Schlüsselwort INTERVAL und die Angabe type unterscheiden die Groß-/Kleinschreibung nicht. Die folgende Tabelle zeigt die erwartete Form des Arguments expr für die einzelnen type-Werte. type Wert Erwartetes exprFormat 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.MICROSECONDS' MINUTE_SECOND 'MINUTES:SECONDS' HOUR_MICROSECOND 'HOURS.MICROSECONDS' HOUR_SECOND 'HOURS:MINUTES:SECONDS' HOUR_MINUTE 'HOURS:MINUTES' DAY_MICROSECOND 'DAYS.MICROSECONDS' DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS' DAY_MINUTE 'DAYS HOURS:MINUTES' DAY_HOUR 'DAYS HOURS' YEAR_MONTH 'YEARS-MONTHS' MySQL erlaubt die Verwendung beliebiger Interpunktionszeichen als Trennzeichen im Format von expr. Die in der Tabelle gezeigten Trennzeichen sind als Vorschläge aufzufassen. Wenn das Argument date ein DATE-Wert ist und Ihre Berechnungen nur die Teile YEAR, MONTH und DAY (also keine uhrzeitbezogenen Teile) betreffen, ist das Ergebnis ein DATE-Wert. Andernfalls ist das Ergebnis ein DATETIME-Wert. Datumsberechnungen können auch mit INTERVAL in Kombination mit den Operatoren + und - durchgeführt werden: date + INTERVAL expr type date – INTERVAL expr type INTERVAL expr type ist auf beiden Seiten des Operators + zulässig, wenn der Ausdruck auf der jeweils anderen Seite ein DATE– oder DATETIME-Wert ist. Beim Operator - ist INTERVAL expr type nur auf der rechten Seite der Gleichung zulässig, da das Abziehen eines DATE– oder DATETIME-Werts von einem Intervall unsinnig wäre. mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND; -> ‚1998-01-01 00:00:00‘ mysql> SELECT INTERVAL 1 DAY + '1997-12-31'; -> ‚1998-01-01‘ mysql> SELECT '1998-01-01' - INTERVAL 1 SECOND; -> ‚1997-12-31 23:59:59‘ mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL 1 SECOND); -> ‚1998-01-01 00:00:00‘ mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL 1 DAY); -> ‚1998-01-01 23:59:59‘ mysql> SELECT DATE_ADD('1997-12-31 23:59:59', -> INTERVAL '1:1' MINUTE_SECOND); -> ‚1998-01-01 00:01:00‘ mysql> SELECT DATE_SUB('1998-01-01 00:00:00', -> INTERVAL '1 1:1:1' DAY_SECOND); -> ‚1997-12-30 22:58:59‘ mysql> SELECT DATE_ADD('1998-01-01 00:00:00', -> INTERVAL '-1 10' DAY_HOUR); -> ‚1997-12-30 14:00:00‘ mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); -> ‚1997-12-02‘ mysql> SELECT DATE_ADD('1992-12-31 23:59:59.000002', -> INTERVAL '1.999999' SECOND_MICROSECOND); -> ‚1993-01-01 00:00:01.000001‘ Wenn Sie einen Intervallwert angeben, der zu kurz ist (d. h. nicht alle Intervallteile enthält, die aufgrund des Schlüsselworts type erwartet werden), dann geht MySQL davon aus, dass Sie den linken Teil des Intervallwerts weggelassen haben. Geben Sie also etwa als type DAY_SECOND an, dann wird erwartet, dass der Wert von expr Teile für Tage, Stunden, Minuten und Sekunden enthält. Bei einer Angabe '1:10' setzt MySQL voraus, dass die Teile für Tage und Stunden fehlen und der Wert Minuten und Sekunden angibt. Anders gesagt, wird '1:10' DAY_SECOND als äquivalent zu '1:10' MINUTE_SECOND interpretiert. Dies entspricht auch der Art und Weise, wie MySQL TIME-Werte als verstrichene Zeit (statt als Uhrzeit) auffasst. Wenn Sie etwas zu einem Datum hinzuaddieren oder davon abziehen, das einen Uhrzeitteil enthält, dann wird das Ergebnis automatisch in einen DATETIME-Wert umgewandelt: mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 DAY); -> ‚1999-01-02‘ mysql> SELECT DATE_ADD('1999-01-01', INTERVAL 1 HOUR); -> ‚1999-01-01 01:00:00‘ Wenn Sie MONTH, YEAR_MONTH oder YEAR hinzuaddieren und das Ergebnis einen Tageswert hat, der größer ist als der letzte Tag des neuen Monats, dann wird der Tag im neuen Monat auf den letzten Tag gesetzt: mysql> SELECT DATE_ADD('1998-01-30', INTERVAL 1 MONTH); -> ‚1998-02-28‘ Datumsberechnungen erfordern vollständige Datumsangaben; unvollständige Angaben wie '2005-07-00' oder erheblich fehlerhaft formatierte Werte wie die folgenden funktionieren nicht: mysql> SELECT DATE_ADD('2006-07-00', INTERVAL 1 DAY); -> NULL mysql> SELECT '2005-03-32' + INTERVAL 1 MONTH; -> NULL
  • DATE_FORMAT(date,format) Formatiert den Wert date entsprechend dem String format. Die folgenden Konfigurationsangaben können im String format verwendet werden. Das Zeichen ‘%’ ist vor jede Formatangabe zu setzen. Konfigurationsangabe Beschreibung %a Abgekürzter Name des Wochentags (SunSat) %b Abgekürzter Name des Monats (JanDec) %c Monat, numerisch (012) %D Tag im Monat mit englischem Suffix (0th, 1st, 2nd, 3rd, …) %d Tag im Monat, numerisch (0031) %e Tag im Monat, numerisch (031) %f Mikrosekunden (000000999999) %H Stunde (0023) %h Stunde (0112) %I Stunde (0112) %i Minuten, numerisch (0059) %j Tag im Jahr (001366) %k Stunde (023) %l Stunde (112) %M Monatsname (JanuaryDecember) %m Monat, numerisch (0012) %p AM oder PM %r Uhrzeit im 12-Stunden-Format (hh:mm:ss gefolgt von AM oder PM) %S Sekunden (0059) %s Sekunden (0059) %T Uhrzeit im 24-Stunden-Format (hh:mm:ss) %U Woche (0053), wobei Sonntag der erste Tag der Woche ist %u Woche (0053), wobei Montag der erste Tag der Woche ist %V Woche (0153), wobei Sonntag der erste Tag der Woche ist; wird mit %X verwendet %v Woche (0153), wobei Montag der erste Tag der Woche ist; wird mit %x verwendet %W Name des Wochentags (SundaySaturday) %w Tag in der Woche (0=Sonntag … 6=Sonnabend) %X Jahr der Woche, wobei Sonntag der erste Tag der Woche ist, numerisch, vierstellig; wird mit %V verwendet %x Jahr der Woche, wobei Montag der erste Tag der Woche ist, numerisch, vierstellig; wird mit %v verwendet %Y Jahr, numerisch, vierstellig %y Jahr, numerisch, zweistellig %% Literales ‘%’-Zeichen %x x, steht für jedes nicht oben aufgeführte ‘x’ Da MySQL die Speicherung unvollständiger Daten wie '2004-00-00' gestattet, beginnen die Bereiche für die monats- und tagesbezogenen Konfigurationsangaben bei null. mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -> ‚Saturday October 1997‘ mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -> ’22:23:00′ mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', ‚%D %y %a %d %m %b %j‘); -> ‚4th 97 Sat 04 10 Oct 277‘ mysql> SELECT DATE_FORMAT('1997-10-04 22:23:00', ‚%H %k %I %r %T %S %w‘); -> ’22 22 10 10:23:00 PM 22:23:00 00 6′ mysql> SELECT DATE_FORMAT('1999-01-01', '%X %V'); -> ‚1998 52‘ mysql> SELECT DATE_FORMAT('2006-06-00', '%d'); -> ’00‘
  • DAY(date) DAY() ist ein Synonym für DAYOFMONTH().
  • DAYNAME(date) Gibt den Namen des Wochentags für date zurück. mysql> SELECT DAYNAME('1998-02-05'); -> ‚Thursday‘
  • DAYOFMONTH(date) Gibt den Tag im Monat für date zurück. Der Bereich liegt zwischen 0 und 31. mysql> SELECT DAYOFMONTH('1998-02-03'); -> 3
  • DAYOFWEEK(date) Gibt den Wochentagindex für date zurück (1 = Sonntag, 2 = Montag, …, 7 = Sonnabend). Diese Indexwerte entsprechen dem ODBC-Standard. mysql> SELECT DAYOFWEEK('1998-02-03'); -> 3
  • DAYOFYEAR(date) Gibt den Tag im Jahr für date zurück. Der Bereich liegt zwischen 1 und 366. mysql> SELECT DAYOFYEAR('1998-02-03'); -> 34
  • EXTRACT(type FROM date) Die Funktion EXTRACT() verwendet dieselben Angaben für den Intervalltyp wie DATE_ADD() oder DATE_SUB(), extrahiert aber Teile des Datums, statt daran Berechnungen durchzuführen. mysql> SELECT EXTRACT(YEAR FROM '1999-07-02'); -> 1999 mysql> SELECT EXTRACT(YEAR_MONTH FROM '1999-07-02 01:02:03'); -> 199907 mysql> SELECT EXTRACT(DAY_MINUTE FROM '1999-07-02 01:02:03'); -> 20102 mysql> SELECT EXTRACT(MICROSECOND -> FROM '2003-01-02 10:30:00.000123'); -> 123
  • FROM_DAYS(N) Gibt für eine Tagesanzahl N den DATE-Wert zurück. mysql> SELECT FROM_DAYS(729669); -> ‚1997-10-07‘ Verwenden Sie FROM_DAYS() bei alten Datumsangaben mit Vorsicht. Die Funktion ist nicht zur Verwendung mit Daten gedacht, die vor der Einführung des gregorianischen Kalenders (1582) liegen. Siehe auch Abschnitt 12.6, „Welchen Kalender benutzt MySQL?“.
  • FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp,format) Gibt eine Darstellung des unix_timestamp-Arguments als Wert in den Formaten 'YYYY-MM-DD HH:MM:SS' oder YYYYMMDDHHMMSS zurück. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. unix_timestamp ist ein interner Zeitstempelwert, der von der Funktion UNIX_TIMESTAMP() erzeugt wird. Wenn format angegeben ist, wird das Ergebnis entsprechend dem String format formatiert, der so verwendet wird wie im Abschnitt zur Funktion DATE_FORMAT() beschrieben. mysql> SELECT FROM_UNIXTIME(875996580); -> ‚1997-10-04 22:23:00‘ mysql> SELECT FROM_UNIXTIME(875996580) + 0; -> 19971004222300 mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), -> '%Y %D %M %h:%i:%s %x'); -> ‚2003 6th August 06:22:58 2003‘ Hinweis: Wenn Sie UNIX_TIMESTAMP() und FROM_UNIXTIME() zur Konvertierung zwischen TIMESTAMP-Werten und Unix-Zeitstempelwerten verwenden, ist die Konvertierung verlustbehaftet, weil die Zuordnung nicht in beiden Richtungen 1 : 1 erfolgt. Weitere Informationen entnehmen Sie der Beschreibung der Funktion UNIX_TIMESTAMP().
  • GET_FORMAT(DATE|TIME|DATETIME, 'EUR'|'USA'|'JIS'|'ISO'|'INTERNAL') Gibt einen Format-String zurück. Diese Funktion ist praktisch in Verbindung mit den Funktionen DATE_FORMAT() und STR_TO_DATE(). Die zulässigen Werte für das erste und zweite Argument ergeben verschiedene Möglichkeiten für Format-Strings. (Die Konfigurationsangaben entnehmen Sie der Tabelle in der Beschreibung zu DATE_FORMAT().) Das ISO-Format verweist auf ISO 9075, nicht auf ISO 8601. Funktionsaufruf Ergebnis GET_FORMAT(DATE,'USA') '%m.%d.%Y' GET_FORMAT(DATE,'JIS') '%Y-%m-%d' GET_FORMAT(DATE,'ISO') '%Y-%m-%d' GET_FORMAT(DATE,'EUR') '%d.%m.%Y' GET_FORMAT(DATE,'INTERNAL') '%Y%m%d' GET_FORMAT(DATETIME,'USA') '%Y-%m-%d-%H.%i.%s' GET_FORMAT(DATETIME,'JIS') '%Y-%m-%d %H:%i:%s' GET_FORMAT(DATETIME,'ISO') '%Y-%m-%d %H:%i:%s' GET_FORMAT(DATETIME,'EUR') '%Y-%m-%d-%H.%i.%s' GET_FORMAT(DATETIME,'INTERNAL') '%Y%m%d%H%i%s' GET_FORMAT(TIME,'USA') '%h:%i:%s %p' GET_FORMAT(TIME,'JIS') '%H:%i:%s' GET_FORMAT(TIME,'ISO') '%H:%i:%s' GET_FORMAT(TIME,'EUR') '%H.%i.%S' GET_FORMAT(TIME,'INTERNAL') '%H%i%s' TIMESTAMP kann auch als erstes Argument für GET_FORMAT() verwendet werden. In diesem Fall gibt die Funktion dieselben Werte wie bei DATETIME zurück. mysql> SELECT DATE_FORMAT('2003-10-03',GET_FORMAT(DATE,'EUR')); -> ‚03.10.2003‘ mysql> SELECT STR_TO_DATE('10.31.2003',GET_FORMAT(DATE,'USA')); -> ‚2003-10-31‘
  • HOUR(time) Gibt die Stundenangabe in time zurück. Der Bereich des Rückgabewerts liegt zwischen 0 und 23 bei Tageszeitwerten. Allerdings ist der zulässige Bereich für TIME wesentlich größer, d. h., HOUR kann Werte zurückgeben, die größer als 23 sind. mysql> SELECT HOUR('10:05:03'); -> 10 mysql> SELECT HOUR('272:59:59'); -> 272
  • LAST_DAY(date) Nimmt einen DATE– oder DATETIME-Wert entgegen und gibt den entsprechenden Wert des letzten Tages des betreffenden Monats zurück. Gibt NULL zurück, wenn das Argument unzulässig ist. mysql> SELECT LAST_DAY('2003-02-05'); -> ‚2003-02-28‘ mysql> SELECT LAST_DAY('2004-02-05'); -> ‚2004-02-29‘ mysql> SELECT LAST_DAY('2004-01-01 01:01:01'); -> ‚2004-01-31‘ mysql> SELECT LAST_DAY('2003-03-32'); -> NULL
  • LOCALTIME, LOCALTIME() LOCALTIME und LOCALTIME() sind Synonyme von NOW().
  • LOCALTIMESTAMP, LOCALTIMESTAMP() LOCALTIMESTAMP und LOCALTIMESTAMP() sind Synonyme von NOW().
  • MAKEDATE(year,dayofyear) Gibt ein Datum zurück, welches auf den übergebenen Werten für das Jahr und den Tag im Jahr basiert. dayofyear muss größer als 0 sein, andernfalls ist das Ergebnis NULL. mysql> SELECT MAKEDATE(2001,31), MAKEDATE(2001,32); -> ‚2001-01-31‘, ‚2001-02-01‘ mysql> SELECT MAKEDATE(2001,365), MAKEDATE(2004,365); -> ‚2001-12-31‘, ‚2004-12-30‘ mysql> SELECT MAKEDATE(2001,0); -> NULL
  • MAKETIME(hour,minute,second) Gibt einen Zeitwert zurück, der aus den Argumenten hour, minute und second berechnet wird. mysql> SELECT MAKETIME(12,15,30); -> ’12:15:30′
  • MICROSECOND(expr) Gibt die Anzahl der Mikrosekunden für den übergebenen TIME– oder DATETIME-Ausdruck expr als Zahl im Bereich zwischen 0 und 999999 zurück. mysql> SELECT MICROSECOND('12:00:00.123456'); -> 123456 mysql> SELECT MICROSECOND('1997-12-31 23:59:59.000010'); -> 10
  • MINUTE(time) Gibt die Minute für time im Bereich zwischen 0 und 59 zurück. mysql> SELECT MINUTE('98-02-03 10:05:03'); -> 5
  • MONTH(date) Gibt den Monat für date im Bereich zwischen 0 und 12 zurück. mysql> SELECT MONTH('1998-02-03'); -> 2
  • MONTHNAME(date) Gibt den vollständigen Namen des Monats für date zurück. mysql> SELECT MONTHNAME('1998-02-05'); -> ‚February‘
  • NOW() Gibt die aktuellen Werte für Datum und Uhrzeit als Wert in den Formaten YYYYMMDDHHMMSS oder 'YYYY-MM-DD HH:MM:SS' aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT NOW(); -> ‚1997-12-15 23:50:26‘ mysql> SELECT NOW() + 0; -> 19971215235026 Aus einer gespeicherten Routine oder einem Trigger heraus gibt NOW() einen Zeitpunkt als Konstante zurück, zu dem die Ausführung der Routine bzw. des Triggers begann. Hier liegt ein Unterschied zum Verhalten von SYSDATE() vor, welches die exakte Zeit seiner Ausführung zurückgibt.
  • PERIOD_ADD(P,N) Fügt N Monate zum Zeitraum P (im Format YYMM oder YYYYMM) hinzu. Gibt einen Wert im Format YYYYMM zurück. Beachten Sie, dass das Zeitraumargument P kein Datumswert ist. mysql> SELECT PERIOD_ADD(9801,2); -> 199803
  • PERIOD_DIFF(P1,P2) Gibt die Anzahl der Monate zwischen den Zeiträumen P1 und P2 zurück. P1 und P2 sollten im Format YYMM oder YYYYMM übergeben werden. Beachten Sie, dass die Zeitraumargumente P1 und P2 keine Datumswerte sind. mysql> SELECT PERIOD_DIFF(9802,199703); -> 11
  • QUARTER(date) Gibt das Quartal im Jahr für date zurück. Der Bereich liegt zwischen 1 und 4. mysql> SELECT QUARTER('98-04-01'); -> 2
  • SECOND(time) Gibt die Sekunde für time im Bereich zwischen 0 und 59 zurück. mysql> SELECT SECOND('10:05:03'); -> 3
  • SEC_TO_TIME(seconds) Gibt das Argument seconds, konvertiert in Stunden, Minuten und Sekunden, als Wert in den Formaten 'HH:MM:SS' oder HHMMSS aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT SEC_TO_TIME(2378); -> ’00:39:38′ mysql> SELECT SEC_TO_TIME(2378) + 0; -> 3938
  • STR_TO_DATE(str,format) Dies ist die Umkehrung der Funktion DATE_FORMAT(). Sie nimmt einen String str und einen Format-String format entgegen. STR_TO_DATE() gibt einen DATETIME-Wert zurück, wenn der Format-String sowohl Datums- als auch Uhrzeitteile enthält, oder einen DATETIME-Wert, wenn der String nur Datums- bzw. Uhrzeitteile umfasst. Die DATE-, TIME– oder DATETIME-Werte, die in str enthalten sind, sollten in dem Format angegeben werden, das durch format spezifiziert wurde. Informationen zu den in format verwendbaren Konfigurationsangaben finden Sie in der Beschreibung zur Funktion DATE_FORMAT(). Wenn str einen unzulässigen DATE-, TIME– oder DATETIME-Wert enthält, gibt STR_TO_DATE() NULL zurück. Außerdem erzeugt ein unzulässiger Wert eine Warnung. Die Bereichsprüfung der Teile von Datumswerten erfolgt wie in Abschnitt 11.3.1, „Die DATETIME-, DATE– und TIMESTAMP-Typen“, beschrieben. Das bedeutet, dass „Nulldaten“ oder solche, bei denen Bestandteile 0 sind, zulässig sind, sofern dem nicht der aktive SQL-Modus widerspricht. mysql> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y'); -> ‚0000-00-00‘ mysql> SELECT STR_TO_DATE('04/31/2004', '%m/%d/%Y'); -> ‚2004-04-31‘
  • SUBDATE(date,INTERVAL expr type), SUBDATE(expr,days) Wenn mit der Form INTERVAL für das zweite Argument aufgerufen wird, ist SUBDATE() ein Synonym von DATE_SUB(). Weitere Informationen zum Argument INTERVAL finden Sie in der Beschreibung zu DATE_ADD(). mysql> SELECT DATE_SUB('1998-01-02', INTERVAL 31 DAY); -> ‚1997-12-02‘ mysql> SELECT SUBDATE('1998-01-02', INTERVAL 31 DAY); -> ‚1997-12-02‘ Die zweite Form gestattet die Verwendung eines Integer-Werts für days. In solchen Fällen wird der Wert als Anzahl von Tagen interpretiert, die vom DATE– oder DATETIME-Ausdruck expr abgezogen werden. mysql> SELECT SUBDATE('1998-01-02 12:00:00', 31); -> ‚1997-12-02 12:00:00‘ Hinweis: Sie können mit dem Format "%X%V" keine Konvertierung eines aus einer Jahres- und einer Wochenangabe bestehenden Strings in ein Datum durchführen, weil diese Kombination nicht eindeutig ein Jahr und einen Monat bezeichnet, wenn eine Woche eine Monatsgrenze überschreitet. Insofern müssen Sie, wenn Sie eine Jahr-/Wochen-Kombination in ein Datum umwandeln wollen, auch den Wochentag angeben: mysql> SELECT STR_TO_DATE('200442 Monday', '%X%V %W'); -> ‚2004-10-18‘
  • SUBTIME(expr,expr2) SUBTIME() zieht expr2 von expr ab und gibt das Ergebnis zurück. expr ist eine Uhrzeitangabe oder ein DATETIME-Wert, expr2 eine Uhrzeitangabe. mysql> SELECT SUBTIME('1997-12-31 23:59:59.999999','1 1:1:1.000002'); -> ‚1997-12-30 22:58:58.999997‘ mysql> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998'); -> ‚-00:59:59.999999‘
  • SYSDATE() Gibt die aktuellen Werte für Datum und Uhrzeit als Wert in den Formaten YYYYMMDDHHMMSS oder 'YYYY-MM-DD HH:MM:SS' aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. Aus einer gespeicherten Routine oder einem Trigger heraus gibt SYSDATE() die Zeit zurück, zu der sie ausgeführt wird. Dies unterscheidet sich vom Verhalten von NOW(), welches die Uhrzeit zurückgibt, zu der die Ausführung der Routine- oder Trigger-Anweisung begann.
  • TIME(expr) Extrahiert den Zeitbestandteil des TIME– oder DATETIME-Ausdrucks expr und gibt diesen als String zurück. mysql> SELECT TIME('2003-12-31 01:02:03'); -> ’01:02:03′ mysql> SELECT TIME('2003-12-31 01:02:03.000123'); -> ’01:02:03.000123′
  • TIMEDIFF(expr,expr2) TIMEDIFF() gibt den Zeitraum zwischen der Startzeit expr und der Endzeit expr2 zurück. expr und expr2 sind Zeit- oder DATETIME-Ausdrücke, müssen aber vom selben Typ sein. mysql> SELECT TIMEDIFF('2000:01:01 00:00:00', -> '2000:01:01 00:00:00.000001'); -> ‚-00:00:00.000001‘ mysql> SELECT TIMEDIFF('1997-12-31 23:59:59.000001', -> '1997-12-30 01:01:01.000002'); -> ’46:58:57.999999′
  • TIMESTAMP(expr), TIMESTAMP(expr,expr2) Bei nur einem Argument gibt diese Funktion den Datums- oder DATETIME-Ausdruck expr als DATETIME-Wert zurück. Bei zwei Argumenten wird der Zeitausdruck expr2 zum Datums- oder DATETIME-Ausdruck expr hinzugefügt und das Ergebnis als DATETIME-Wert zurückgegeben. mysql> SELECT TIMESTAMP('2003-12-31'); -> ‚2003-12-31 00:00:00‘ mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00'); -> ‚2004-01-01 00:00:00‘
  • TIMESTAMPADD(interval,int_expr,datetime_expr) Fügt den Integer-Ausdruck int_expr zum Datums- oder DATETIME-Ausdruck datetime_expr hinzu. Die Einheit für int_expr wird durch das Argument interval angegeben, das einen der folgenden Werte haben sollte: FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER oder YEAR. Der interval-Wert kann mithilfe eines der angegebenen Schlüsselwörter oder mit dem Präfix SQL_TSI_ angegeben werden. Beispielsweise sind sowohl DAY als auch SQL_TSI_DAY zulässig. mysql> SELECT TIMESTAMPADD(MINUTE,1,'2003-01-02'); -> ‚2003-01-02 00:01:00‘ mysql> SELECT TIMESTAMPADD(WEEK,1,'2003-01-02'); -> ‚2003-01-09‘
  • TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2) Gibt den Unterschied zwischen den Datums- oder DATETIME-Ausdrücken datetime_expr1 und datetime_expr2 zurück. Die Einheit für das Ergebnis wird über das Argument interval angegeben. Die zulässigen Werte für interval entsprechen den in der Beschreibung zu TIMESTAMPADD() aufgelisteten Optionen. mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01'); -> 3 mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01'); -> -1
  • TIME_FORMAT(time,format) Wird wie die Funktion DATE_FORMAT() verwendet, der String format darf aber nur Formatangaben für Stunden, Minuten und Sekunden enthalten. Andere Konfigurationsangaben erzeugen einen NULL-Wert oder 0. Wenn der time-Wert einen Stundenbestandteil enthält, der größer als 23 ist, erzeugen die Stundenformatangaben %H und %k einen Wert, der größer ist als der normale Bereich 0 ... 23. Die übrigen Konfigurationsangaben für das Stundenformat erzeugen den Stundenwert mod 12. mysql> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l'); -> ‚100 100 04 04 4‘
  • TIME_TO_SEC(time) Gibt das Argument time in Sekunden konvertiert zurück. mysql> SELECT TIME_TO_SEC('22:23:00'); -> 80580 mysql> SELECT TIME_TO_SEC('00:39:38'); -> 2378
  • TO_DAYS(date) Gibt zu einem Datum date eine Anzahl von Tagen zurück. Diese gibt die Anzahl der seit dem Jahr 0 bis zu diesem Datum verstrichenen Tage zurück. mysql> SELECT TO_DAYS(950501); -> 728779 mysql> SELECT TO_DAYS('1997-10-07'); -> 729669 TO_DAYS() ist nicht für die Verwendung mit Werten geeignet, die vor der Einführung des gregorianischen Kalenders (1582) liegen, da die bei der Kalenderumstellung „verlorenen“ Tage von der Funktion nicht berücksichtigt werden. Bei Daten vor 1582 (und standortabhängig möglicherweise auch danach) sind die Ergebnisse dieser Funktion nicht zuverlässig. Weitere Informationen finden Sie in Abschnitt 12.6, „Welchen Kalender benutzt MySQL?“. Denken Sie daran, dass MySQL zweistellige Jahresangaben unter Verwendung der in Abschnitt 11.3, „Datums- und Zeittypen“, beschriebenen Regeln in das vierstellige Format umwandelt. Beispielsweise werden '1997-10-07' und '97-10-07' als identische Daten betrachtet. mysql> SELECT TO_DAYS('1997-10-07'), TO_DAYS('97-10-07'); -> 729669, 729669
  • UNIX_TIMESTAMP(), UNIX_TIMESTAMP(date) Sofern ohne Argument aufgerufen, gibt die Funktion einen Unix-Zeitstempel (Sekunden seit '1970-01-01 00:00:00' im UTC-Format) als vorzeichenlosen Integer zurück. Wenn UNIX_TIMESTAMP() mit einem Argument date aufgerufen wird, gibt es den Wert des Arguments als seit dem Zeitpunkt '1970-01-01 00:00:00' (UTC) verstrichene Sekunden zurück. date kann ein DATE-String, ein DATETIME-String, ein TIMESTAMP oder eine Zahl im Format YYMMDD oder YYYYMMDD sein. Der Server interpretiert date als Wert in der aktuellen Zeitzone und wandelt es in einen internen Wert in UTC um. Clients können ihre Zeitzone wie in Abschnitt 5.11.8, „Zeitzonen-Unterstützung des MySQL-Servers“, beschrieben einstellen. mysql> SELECT UNIX_TIMESTAMP(); -> 882226357 mysql> SELECT UNIX_TIMESTAMP('1997-10-04 22:23:00'); -> 875996580 Wenn UNIX_TIMESTAMP für eine TIMESTAMP-Spalte verwendet wird, gibt die Funktion den internen Zeitstempelwert direkt zurück, d. h. ohne implizite Konvertierung des Strings in einen Unix-Zeitstempel. Wenn Sie einen Wert außerhalb des zulässigen Bereichs an UNIX_TIMESTAMP() übergeben, wird 0 zurückgegeben. Hinweis: Wenn Sie UNIX_TIMESTAMP() und FROM_UNIXTIME() zur Konvertierung zwischen TIMESTAMP-Werten und Unix-Zeitstempelwerten verwenden, ist die Konvertierung verlustbehaftet, weil die Zuordnung nicht in beiden Richtungen 1 : 1 erfolgt. Beispielsweise kann es aufgrund der Konventionen zur Änderung der lokalen Zeitzone möglich sein, dass zwei UNIX_TIMESTAMP()-Funktionen zwei TIMESTAMP-Werte in denselben Unix-Zeitstempelwert umwandeln. FROM_UNIXTIME() wiederum konvertiert den Wert dann in nur einen der ursprünglichen TIMESTAMP-Werte zurück. Es folgt ein Beispiel unter Verwendung von TIMESTAMP-Werten in der Zeitzone CET (mitteleuropäische Zeit): mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00'); +—————————————+ | UNIX_TIMESTAMP(‚2005-03-27 03:00:00‘) | +—————————————+ | 1111885200 | +—————————————+ mysql> SELECT UNIX_TIMESTAMP('2005-03-27 02:00:00'); +—————————————+ | UNIX_TIMESTAMP(‚2005-03-27 02:00:00‘) | +—————————————+ | 1111885200 | +—————————————+ mysql> SELECT FROM_UNIXTIME(1111885200); +—————————+ | FROM_UNIXTIME(1111885200) | +—————————+ | 2005-03-27 03:00:00 | +—————————+ Wenn Sie UNIX_TIMESTAMP()-Spalten subtrahieren wollen, sollten Sie das Ergebnis in vorzeichenbehaftete Integers umwandeln. Siehe auch Abschnitt 12.8, „Cast-Funktionen und Operatoren“.
  • UTC_DATE, UTC_DATE() Gibt das aktuelle UTC-Datum als Wert in den Formaten 'YYYY-MM-DD' oder YYYYMMDD aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT UTC_DATE(), UTC_DATE() + 0; -> ‚2003-08-14‘, 20030814
  • UTC_TIME, UTC_TIME() Gibt die aktuelle UTC-Uhrzeit als Wert in den Formaten 'HH:MM:SS' oder HHMMSS aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT UTC_TIME(), UTC_TIME() + 0; -> ’18:07:53′, 180753
  • UTC_TIMESTAMP, UTC_TIMESTAMP() Gibt die aktuellen UTC-Werte für Datum und Uhrzeit als Wert in den Formaten YYYYMMDDHHMMSS oder 'YYYY-MM-DD HH:MM:SS' aus. Das Ausgabeformat hängt davon ab, ob die Funktion in einem String- oder einem numerischen Kontext verwendet wird. mysql> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 0; -> ‚2003-08-14 18:08:04‘, 20030814180804
  • WEEK(date[,mode]) Diese Funktion gibt die Nummer der Woche für date zurück. Wird WEEK() mit zwei Argumenten verwendet, dann gestattet Ihnen die Funktion die Angabe, ob die Woche am Sonntag oder Montag beginnt und ob der Rückgabewert im Bereich zwischen 0 und 53 oder 1 und 53 liegen soll. Wird das Argument mode weggelassen, so wird der Wert der Systemvariablen default_week_format verwendet. Siehe auch Abschnitt 5.2.2, „Server-Systemvariablen“. Die folgende Tabelle beschreibt, wie das Argument mode funktioniert.   Erster     Modus Wochentag Bereich Woche 1 ist die erste Woche … 0 Sonntag 0–53 mit einem Sonntag in diesem Jahr 1 Montag 0–53 mit mehr als drei Tagen innerhalb dieses Jahres 2 Sonntag 1–53 mit einem Sonntag in diesem Jahr 3 Montag 1–53 mit mehr als drei Tagen innerhalb dieses Jahres 4 Sonntag 0–53 mit mehr als drei Tagen innerhalb dieses Jahres 5 Montag 0–53 mit einem Montag in diesem Jahr 6 Sonntag 1–53 mit mehr als drei Tagen innerhalb dieses Jahres 7 Montag 1–53 mit einem Montag in diesem Jahr mysql> SELECT WEEK('1998-02-20'); -> 7 mysql> SELECT WEEK('1998-02-20',0); -> 7 mysql> SELECT WEEK('1998-02-20',1); -> 8 mysql> SELECT WEEK('1998-12-31',1); -> 53 Beachten Sie, dass, wenn ein Datum in die letzte Woche des vorherigen Jahres fällt, MySQL 0 zurückgibt, sofern Sie nicht 2, 3, 6 oder 7 als optionales mode-Argument angeben: mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0); -> 2000, 0 Man könnte nun anführen, dass MySQL doch eigentlich 52 für die Funktion WEEK() zurückgeben sollte, da das angegebene Datum eigentlich in der 52. Woche des Jahres 1999 liegt. Wir haben aber beschlossen, stattdessen 0 zurückgeben zu lassen, weil die Funktion „Nummer der Woche im angegebenen Jahr“ zurückgeben soll. Dies macht die Verwendung der Funktion WEEK() zuverlässig, wenn sie mit anderen Funktionen kombiniert wird, die einen Tagesbestandteil aus dem Datum extrahieren. Wenn Sie eine Auswertung des Ergebnisses in Bezug auf das Jahr vorziehen, das den ersten Tag der Woche des angegebenen Datums enthält, dann verwenden Sie 0, 2, 5 oder 7 als optionales mode-Argument. mysql> SELECT WEEK('2000-01-01',2); -> 52 Alternativ verwenden Sie die Funktion YEARWEEK(): mysql> SELECT YEARWEEK('2000-01-01'); -> 199952 mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2); -> ’52‘
  • WEEKDAY(date) Gibt den Wochentagindex für date zurück (0 = Montag, 1 = Dienstag, …, 6 = Sonntag). mysql> SELECT WEEKDAY('1998-02-03 22:23:00'); -> 1 mysql> SELECT WEEKDAY('1997-11-05'); -> 2
  • WEEKOFYEAR(date) Gibt die Kalenderwoche des Datums als Zahl im Bereich zwischen 1 und 53 zurück. WEEKOFYEAR() ist eine Kompatibilitätsfunktion, die äquivalent zu WEEK(date,3) ist. mysql> SELECT WEEKOFYEAR('1998-02-20'); -> 8
  • YEAR(date) Gibt das Jahr für date im Bereich zwischen 1000 und 9999 oder aber 0 für das „Nulldatum“ zurück. mysql> SELECT YEAR('98-02-03'); -> 1998
  • YEARWEEK(date), YEARWEEK(date,start) Gibt Jahr und Woche für ein Datum zurück. Das Argument start funktioniert ganz genauso wie das Argument start für WEEK(). Das Jahr im Ergebnis kann sich im Falle der ersten und der letzten Woche des Jahres vom Jahr im Datumsargument unterscheiden. mysql> SELECT YEARWEEK('1987-01-01'); -> 198653 Beachten Sie, dass die Wochennummer sich von dem, was die Funktion WEEK() für ihre optionalen Argumente 0 oder 1 zurückgäbe (nämlich 0), unterscheidet, denn WEEK() gibt die Woche im Kontext des angegebenen Jahres zurück.

Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

Kategorien: AnweisungITSQL