Das MySQL STR_TO_DATE()
Mit der Funktion können Sie aus den verschiedenen Datumsteilen einen Datumswert erstellen.
Wenn Sie diese Funktion verwenden, geben Sie eine Zeichenfolge mit den verschiedenen Datumsteilen und ein zweites Argument an, das das Format angibt, in dem das Datum bereitgestellt wird.
Syntax
Die Syntax sieht so aus:
STR_TO_DATE(str,format)
Wobei str
ist die Zeichenfolge, die die Datumsteile enthält, und format ist die Formatzeichenfolge (bestimmt, wie die str
Argument ist formatiert).
Beispiel 1 – Grundlegende Verwendung
Hier ist ein Beispiel zur Veranschaulichung.
SELECT STR_TO_DATE('31,12,1999','%d,%m,%Y');
Ergebnis:
Beispiel 2 – Reihenfolge des Formatstrings
Die Formatzeichenfolge muss mit den in der Datumszeichenfolge bereitgestellten Werten übereinstimmen. Folgendes ist beispielsweise nicht möglich:
SELECT STR_TO_DATE('31,12,1999','%m,%d,%Y');
Ergebnis:
Der Grund, warum dies nicht funktioniert hat, ist, dass wir versuchen, den Monat auf einen Wert von 31 zu zwingen, aber es gibt nur 12 Monate in einem Jahr. Dies würde also zu einem ungültigen Datumswert führen.
Daher müssen Sie bei der Verwendung dieser Funktion vorsichtig sein, insbesondere wenn der Tageswert 12 oder weniger beträgt, da sonst die Monats- und Tageswerte vertauscht werden könnten, ohne es zu bemerken.
Zum Beispiel so:
SELECT STR_TO_DATE('07,12,1999','%d,%m,%Y'), STR_TO_DATE('07,12,1999','%m,%d,%Y');
Ergebnis:
+-------------------------------------+------- -------------------------------+| STR_TO_DATE('07,12,1999','%d,%m,%Y') | STR_TO_DATE('07,12,1999','%m,%d,%Y') |+----------------------------------- -----------+-------------------------------------- +| 1999-12-07 | 1999-07-12 |+--------------------------------------+---- ---------------------------------+
In diesem Fall erhalten wir keinen NULL-Wert wie im vorherigen Beispiel, da sowohl 07
und 12
kann entweder ein Tag oder ein Monat sein.
Beispiel 3 – Abgleich des Formatstrings
Auch wenn die Formatzeichenfolge in der richtigen Reihenfolge ist, muss sie auch mit dem Format der Datumsteile übereinstimmen, die im ersten Argument bereitgestellt werden.
So können Sie beispielsweise Folgendes nicht tun:
SELECT STR_TO_DATE('31 Dec, 1999','%d,%m,%Y');
Ergebnis:
+----------------------------------------+| STR_TO_DATE('31 Dez, 1999','%d,%m,%Y') |+------------------------------------ -------------+| NULL |+----------------------------------------+
In diesem Fall müssten wir etwa so vorgehen:
SELECT STR_TO_DATE('31 Dec, 1999','%d %M, %Y');
Ergebnis:
+------------------------------------+| STR_TO_DATE('31 Dez, 1999','%d %M, %Y') |+------------------------ -------------+| 31.12.1999 |+------------------------------------+
Beispiel 4 – Verwendung der Funktion GET_FORMAT()
Sie können auch GET_FORMAT()
übergeben Funktion als zweites Argument.
Hier ist ein Beispiel.
SELECT STR_TO_DATE('12.07.1999', GET_FORMAT(DATE, 'USA'));
Ergebnis:
Beispiel 5 – Datetime-Werte
Sie können diese Funktion auch verwenden, um einen Zeit- oder Datumszeitwert zurückzugeben.
Hier ist ein Beispiel mit einem datetime-Wert.
SELECT STR_TO_DATE('31/12/1999 09:30:17','%d/%m/%Y %H:%i:%s');
Ergebnis:
Zeichenfolgebezeichner formatieren
Die folgenden Bezeichner können in der Formatzeichenfolge verwendet werden. Darüber hinaus können Sie im Format-String auch Literal-Strings verwenden.
Bezeichner | Beschreibung |
---|---|
%a | Abgekürzter Name des Wochentags (Sun ..Sat ) |
%b | Abgekürzter Monatsname (Jan ..Dec ) |
%c | Monat, numerisch (0 ..12 ) |
%D | Tag des Monats mit englischem Suffix (0th , 1st , 2nd , 3rd , …) |
%d | Tag des Monats, numerisch (00 ..31 ) |
%e | Tag des Monats, numerisch (0 ..31 ) |
%f | Mikrosekunden (000000 ..999999 ) |
%H | Stunde (00 ..23 ) |
%h | Stunde (01 ..12 ) |
%I | Stunde (01 ..12 ) |
%i | Minuten, numerisch (00 ..59 ) |
%j | Tag des Jahres (001 ..366 ) |
%k | Stunde (0 ..23 ) |
%l | Stunde (1 ..12 ) |
%M | Monatsname (January ..Dec ) |
%m | Monat, numerisch (00 ..12 ) |
%p | AM oder PM |
%r | Zeit, 12 Stunden (hh:mm:ss gefolgt von AM oder PM ) |
%S | Sekunden (00 ..59 ) |
%s | Sekunden (00 ..59 ) |
%T | Uhrzeit, 24 Stunden (hh:mm:ss ) |
%U | Woche (00 ..53 ), wobei Sonntag der erste Tag der Woche ist; WEEK() Modus 0 |
%u | Woche (00 ..53 ), wobei Montag der erste Tag der Woche ist; WEEK() Modus 1 |
%V | Woche (01 ..53 ), wobei Sonntag der erste Tag der Woche ist; WEEK() Modus 2; verwendet mit %X |
%v | Woche (01 ..53 ), wobei Montag der erste Tag der Woche ist; WEEK() Modus 3; verwendet mit %x |
%W | Name des Wochentags (Sunday ..Saturday ) |
%w | Wochentag (0 =Sonntag..6 =Samstag) |
%X | Jahr für die Woche, in der Sonntag der erste Wochentag ist, numerisch, vierstellig; verwendet mit %V |
%x | Jahr für die Woche, wobei Montag der erste Tag der Woche ist, numerisch, vierstellig; verwendet mit %v |
%Y | Jahr, numerisch, vierstellig |
%y | Jahr, numerisch (zweistellig) |
%% | Ein Literal % Charakter |
% | x , für jeden „x ” oben nicht aufgeführt |