String auf gültiges Datum prüfen und konvertieren

Fragen und Probleme rund um die Abfragespache SQL.

String auf gültiges Datum prüfen und konvertieren

Beitragvon Bytelight » Do 29. Jan 2009, 17:59

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
Bytelight
Neuer Benutzer
 
Beiträge: 2
Registriert: Do 4. Dez 2008, 15:17

Beitragvon akretschmer » Do 29. Jan 2009, 18:07

Bytelight hat geschrieben: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:

Code: Alles auswählen
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
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5938
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon Bytelight » Do 29. Jan 2009, 21:40

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.
Bytelight
Neuer Benutzer
 
Beiträge: 2
Registriert: Do 4. Dez 2008, 15:17

Beitragvon ads » Do 29. Jan 2009, 21:53

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.
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören Bild

Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

PostgreSQL Service & Support
ads
Erfahrener Benutzer
 
Beiträge: 4147
Registriert: Mi 8. Feb 2006, 11:58
Wohnort: MD


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste