# Datums-String umwandeln Datumswert



## Max-Berater (1. Juni 2021)

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 (1. Juni 2021)

In MySQL müssste es STR_TO_DATE sein

```
SELECT STR_TO_DATE("11. April 2020", "%d. %M %Y")
```


----------



## Zvoni (2. Juni 2021)

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


----------



## Max-Berater (2. Juni 2021)

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 (2. Juni 2021)

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


----------



## Max-Berater (2. Juni 2021)

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 (2. Juni 2021)

Ö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)


----------



## Max-Berater (2. Juni 2021)

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 (4. Juni 2021)

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%'


----------



## Max-Berater (4. Juni 2021)

Habs hinbekommen


----------



## Yaslaw (4. Juni 2021)

Aus der MySQL-Hilfe: `REPLACE(str, find_string, replace_with)`
Bei dir fehlt `str`

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


----------



## Max-Berater (4. Juni 2021)

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


----------



## Max-Berater (4. Juni 2021)

Warst Du schneller als ich. Vielen Dank, funktioniert super


----------



## ByeBye 284669 (4. Juni 2021)

Dein Problem besteht schon darin, dass du das Datum als Text speicherst, das ist falsch. Benutze die Datentypen Date bzw. DateTime


----------



## Max-Berater (4. Juni 2021)

Habe die Umwandlung des Datums-Strings ins englische Format dank Eurer Hilfe hinbekommen, sogar die Umwandlung ins Format 11.04.2021 hat problemlos funktioniert. Besten Dank


----------



## Max-Berater (30. November 2021)

Ich muss das oben genannte Thema nochmal aufgreifen. Hatte es damals so gut gelöst mit der Umwandlung des Datums von z. B. 11. Mai 2021 zu 11. May 2021 und dann zu 11.05.2021

Leider habe ich das Script nicht mehr zur Hand und ich hänge nun wieder an dieser Umwandlung
von 11. May 2021 zu 11.05.2021 - alles andere konnte ich Dank dieses Forums und meinen Beiträgen nachvollziehen und nachbauen. Aber hier hakt es im Moment.

UPDATE Datum AS D
SET D.Datum=REPLACE(D.Datum, 'Mai', 'May')
WHERE D.Datum LIKE '%Mai%';

Aber weiter komme ich im Moment nicht


----------



## ByeBye 284669 (30. November 2021)

Post #14 ignoriert?


----------



## Max-Berater (30. November 2021)

Gesehen aber konnte es nicht mehr zuordnen und in Zusammenhang bringen


----------



## ByeBye 284669 (30. November 2021)

Du speicherst ein Datum so "11. May 2021" bzw. so "11.05.2021". Das ist einfach nur falsch! Datenbanken haben den Datentyp date, der genau dafür gedacht ist. Eine Sortierung nach Datum ist in deinem Fall nicht so einfach möglich, das müsste man dann umständlich mit einer Script-Sprache machen.


----------



## Max-Berater (30. November 2021)

OK, aber ich möchte den 11. May 2021 einfach nur in 11.05.2021 wandeln in der Datenbank und dann als CSV ausgeben lassen bzw. extern weiterverarbeiten. Es hatte alles wunderbar geklappt. Hätte ich ein Backup des Scripts würde ich jetzt mir am diesem Schritt nicht wieder die Zähne ausbeißen bzw. hier im Hilfe fragen müssen.


----------



## Max-Berater (30. November 2021)

UPDATE XXX AS E2T
SET E2T.Datum=DATE_FORMAT(STR_TO_DATE(E2T.Datum, "%d. %M %Y"), "%d.%m.%Y")
WHERE E2T.Datum IS NOT null;


----------



## Max-Berater (30. November 2021)

Hab es hingebastelt mal testen ob es nun auch weiterverarbeitet werden kann


----------



## ByeBye 284669 (30. November 2021)

UPDATE Datum AS D
SET D.Datum=REPLACE(D.Datum, ' May ', '.05.')
WHERE D.Datum LIKE '%May%';


----------



## Zvoni (1. Dezember 2021)

Senf:
scatello hat recht, dass ein Datum auch als Date-Typ abgespeichert werden sollte.
Du erwähnst dauernd, dass diese Sätze extern weiterverarbeitet werden (Weitergabe als CSV)
Dir ist klar/bekannt, dass du beim Export in das CSV von Date-Type auf deinen gewünschten Datums-String umwandeln lassen kannst?
SELECT INTO OUTFILE blablablabla, DATE_FORMAT(MeinDatumAlsDate, '%d.%m.%Y') blablabla FROM blablabla


----------

