Datums-String umwandeln Datumswert

Max-Berater

Mitglied
Ich muss einen Datums string 11. April 2020 so umwandeln dass ich den Wert weiter verarbeiten kann.

Es soll nachher in 11.04.2020 gewandelt werden in mysql.

Wer weiß wie ich sowas umsetzten kann?
 

Yaslaw

n/a
Moderator
In MySQL müssste es STR_TO_DATE sein
Code:
SELECT STR_TO_DATE("11. April 2020", "%d. %M %Y")
 

Zvoni

Erfahrenes Mitglied
In dem Zusammenhang sollte noch DATE_FORMAT erwähnt werden
MySQL DATE_FORMAT() Function

STR_TO_DATE wandelt einen gegebenen String in einen Date-Datentyp ( ! ) um.
Man achte auf den Format-String den Yaslaw genannt hat. Dieser sagt dem Parser, an welcher Stelle des Input-Strings welche Information steht.
Das Ergebnis von STR_TO_DATE ist nämlich "2020-04-11" als Date-Datentyp (ISO-Format)
Wenn man dann noch eine andere "Repräsentation" haben will, kann/sollte man zusätzlich DATE_FORMAT nutzen.
SELECT DATE_FORMAT(STR_TO_DATE("11. April 2020", "%d. %M %Y"), "%d.%m.%Y")
MySQL Tryit Editor v1.0
 
Zuletzt bearbeitet:

Max-Berater

Mitglied
Vielen Dank. Funktioniert auch ganz gut
Aber wenn ich Mai umwandeln will funktioniert dieses nicht da er nur May kennt. Genau so Dezember. Wie löse ich dieses Problem, damit er Mai und Dezember erkennt.
 

Zvoni

Erfahrenes Mitglied
OK,
Frage: Wo kommen die Datums-Angaben her?
Stehen die schon so in MySQL drin? oder sollen die importiert werden?

EDIT: Es dürften nicht nur Mai und Dezember sein, sondern so ziemlich alle bis auf April, August, September und November

EDIT2: Egal wo ich gesucht habe: MySQL versteht nur englisch im Sinne von "abspeichern" bzw. Umwandeln in Datum (nicht zu verwechseln mit "Anzeigen"!)
Wenn also dein deutscher Monatsname irgendwo bereits in MySQL gespeichert ist, dann sicher als Text, und nicht als Datum.
Wirste an einem Search/Replace nicht vorbeikommen
UPDATE MeineTabelle
SET MeineSpalte=REPLACE('Januar','January')
WHERE MeineSpalte LIKE '%Januar%'
usw. für alle anderen Monatsnamen die betroffen sind
Aufpassen, falls du das Query wiederholst (warum auch immer): Der Unterschied zwischen 'Januar' (deutsch) und 'January' (Englisch) ist das 'y' am Ende.
Falls du das Update wiederholst bekommst du nämlich 'Januaryy' als Ergebnis
 
Zuletzt bearbeitet:

Max-Berater

Mitglied
Die Daten bekomme ich in einer csv Liste geliefert. Dann werde ich wohl die Liste in die DB importieren und das Datum Konvertieren, damit ich es weiter verarbeiten kann. Leider wurde das Datums Format abgeändert
Leider zum Nachteil der Verarbeitung.
 

Zvoni

Erfahrenes Mitglied
Öffne das CSV in einem Texteditor (Notepad++, Geany usw.) und mach ein Suchen/Ersetzen lieber dort (Backup vorher machen)

EDIT: Wobei... Vorsicht beim Suchen/Ersetzen.
Bsp. Du öffnest das CSV in einem Texteditor, und machst ein Suchen/Ersetzen von "Juli" auf "July", und schon verhagelts den Vornamen des Users "Julian" (wird zu "Julyan")
Vielleicht das CSV in Excel importieren, dort die Spalte markieren, und nur im markierten Bereich Suchen/Ersetzen, dann wieder export auf CSV.
Ansonsten, wenn du das CSV so wie es ist nach MySQL importierst, wird diese Datumsspalte dann eh zwangsläufig Text. Dann kannste mein UPDATE-SQL nutzen (aus Workbench oder ähnlichem)
 
Zuletzt bearbeitet:

Max-Berater

Mitglied
Ich werde es in sql mit replace versuchen. Falls ich nicht weiter kommen sollte poste ich es hier. Ihr habt mich bis dato immer sehr gut unterstützt. Hierfür nochmals vielen Dank
 

Max-Berater

Mitglied
Ich hab es versucht mit dem Monat Mai - leider tut sich hier nichts

UPDATE zahlungen AS ept,
SET ept.Datum=REPLACE('Mai','May')
WHERE ept.Datum LIKE '%Ma%'

1622800712557.png