String auf gültiges Datum prüfen und konvertieren

Hallo SQL-Profis,

durch den Import einer Datei habe ich zunächst Datumswerte im deutschen Format dd.mm.yyyy in einer varchar-Spalte stehen, allerdings auch andere Zeichen wie z. B. ‘-’ oder NULL.

Diesen String möchte ich darauf prüfen, ob es eine gültiges Datum ist ( suche so was wie IsValidDate()) und wenn ja ins internationale Format yyyy-mm-dd konvertieren, damit mir bei GROUP BY auch die richtige Reihenfolge erzeugt wird.

Ein SELECT start_date, cast(‘start_date’ AS DATE) AS test FROM import scheitert, weil eben die Nicht-Datums-Zeichenketten enthalten sind (nehme ich an).

Wie löse ich dieses Problem?

Vielen Dank im voraus

Bytelight

Du könntest probieren, was to_date() liefert:

test=*# select to_date('-','dd.mm.yyyy');
    to_date
---------------
 0001-01-01 BC
(1 Zeile)

Scheinbar liefert das bei Blödsinn immer diesen Wert.


Andreas

Hallo Andreas,

Danke für die Antwort - damit habe ich es immerhin geschafft, die Daten zu selektieren, die ich zunächst brauche.

Trotzdem bin ich davon überzeugt, dass eine Funktion IsValidDate sinnvoll wäre (die ich nach meiner Einschätzung mit dem to_date() nicht erreichen kann), weil ich meist Dateien aus anderen Anwendungen importiere.

Natürlich könnte man das auch über PHP oder eine andere Skripsprache realisieren, aber ich glaube, dass die Datenbank das schneller könnte.

Vielleicht hat noch jemand eine Idee, wie man eine solche Funktion realisieren könnte.

Ja, selber schreiben, dürfte ziemlich einfach sein.

Du kippst den Parameter als String in die Funktion und diese prüft den Wert und liefert TRUE/FALSE zurück. Alternativ kannst du auch versuchen, intern auf ein Datum zu casten und die Exception abfangen.