2013-09-03 15 views
9

ist es mySQL Funktion ein Datum von Format dd.mm.yy zu YYYY-MM-DD-Format konvertieren?SQL-Datumsformat konvertieren? [Tt.mm.jj bis YYYY-MM-DD]

zum Beispiel 03.09.13 -> 2013-09-03.

+1

Ist Ihre Eingabe ein Datum Typ, oder ist es eine Zeichenfolge, die buchstäblich '03.09.13' ist? –

+0

@ ppeterka66 Ja, und hier zu fragen bedeutet wahrscheinlich, dass ich keine Antwort dafür gefunden habe. – user2216190

+0

@EdGibbs es ist eine Zeichenfolge. – user2216190

Antwort

29

Da Ihr Eingang ist eine Zeichenkette in Form 03.09.13, werde ich annehmen (seit heute 3 September, 2013), dass es dd-mm-yy ist. Sie können es zu einem Datum STR_TO_DATE mit konvertieren:

STR_TO_DATE(myVal, '%d.%m.%y') 

Dann können Sie es formatieren in einen String zurück DATE_FORMAT mit:

DATE_FORMAT(STR_TO_DATE(myVal, '%d.%m.%y'), '%Y-%m-%d') 

Beachten Sie, dass das Jahr %y (Kleinbuchstaben "y") in STR_TO_DATE und %Y (Großbuchstaben "Y") in DATE_FORMAT. Die Kleinschreibung ist für zweistellige Jahre und die Großschreibung für vierstellige Jahre.

+2

DATUM_FORMAT (STR_TO_DATE (myVal,'% d.% M.% Y '),'% Y-% m-% d ') Y ist Großbuchstabe –

+0

Rajavel - es ist ein Kleinbuchstabe "y" in der ersten, weil die Eingabezeichenfolge ein 2-stelliges Jahr hat ('03.09.13'). Im zweiten Fall handelt es sich um einen Großbuchstaben, so dass die Ausgabe ein vierstelliges Jahr ist ("2013-09-03"). –

+0

Danke für mich klar zu machen .. –

4

Verwenden

SELECT CONCAT(
'20', 
SUBSTR('03.09.13', 7, 2), 
'-', 
SUBSTR('03.09.13', 4, 2), 
'-', 
SUBSTR('03.09.13', 1, 2)) 

Fiddle demo.

Mehr über Formate, die Sie in der entsprechenden manual page lesen kann. Tipp: Wenn es sich um einen Konvertierungswert aus einem Nicht-Datum-Zeit-Feld handelt, ist es besser, stattdessen den Datentyp DATUM/DATETIME zu verwenden. Dies ist jedoch eine schlechte Idee mit Daten über String-Funktionen zu arbeiten. Oben gibt es einen netten Trick mit STR_TO_DATE (wird diesen Code nicht wiederholen, aktualisiert, um besser zu passen)

+0

Funktioniert nicht, 'DATE_FORMAT' erfordert das Eingabedatum trotzdem im Y-m-d-Format. Ihre Anfrage (wenn Sie es ausführen) wird '2003-09-13', offensichtlich inkorrekt zurückgeben – Lee

+0

Ja, notiert (nach dem Senden, leider) - aktualisiert. –

+0

Reverted meine Stimme zu einem upvote, nur weil ich nicht auf diese Weise dachte. Nicht etwas, das ich persönlich empfehlen würde (wie ich sicher bin, dass Sie auch nicht), aber angesichts seiner einzigartigen Anforderungen, scheint die einzige Möglichkeit zu sein, es zu tun. – Lee

1

Daten werden unter Verwendung eines internen Formats gespeichert. Sie können die Funktion date_format() verwenden, um sie unter Verwendung einer Vielzahl von Formaten in eine Zeichenfolge zu konvertieren. Denn deine insbesondere:

select date_format(`date`, '%Y-%m-%d') 
Verwandte Themen