PDA

View Full Version : SQL CAST als Datum bei fehlerhaften Werten



Moonwalker
15-12-13, 12:34
Hallo zusammen,

ich habe eine Frage, bei der ihr mir vielleicht helfen könnt.

Ich muss ein Feld aus einer Tabelle als Datum casten. Das Feld in der Datei ist alphanumerisch.

z.B. SELECT CAST(DATUM AS date) FROM TABLE1

Problem ist nur, dass sich unter den Millionen von Datensätzen auch fehlerhaften Daten befinden, die nicht gecastet werden können. Stattdessen steht dafür '++++++++++'.
Gibt es eine Möglichkeit, die Datensätze, die nicht gecastet werden können, einfach auszuschließen? Die Plus-Zeichen sind für ich im Where-Statement nicht greifbar, auch per Hex leider nicht.

Ich habe schon versucht die fehlerhaften Daten per Substring auf gültige Werte zu testen, aber keine Chance. Es gibt z.B. solche Werte: 01.01.2, 01.09.2RZA, RZA01.02.2

Vielen Dank und viele Grüße

B.Hauser
15-12-13, 13:54
Schreib' dir eine kleine SQL-Funktion, die das Datum konvertiert und bei fehlerhaften Datensätzen einen Unterlassungswert (z.B. 0001-01-01 oder 9999-12-31) ausgibt. Diese Funktion verwendest Du dann anstatt das Datum mit CAST zu konvertieren. Anschließend kannst Du die Unterlassungswerte rausfiltern.
Etwa so:

Create Function YourSchema/CvtChar2Date (ParDate VarChar(10))
Returns DATE
Language SQL
Not Deterministic
Contains SQL
Set Option DBGVIEW = *SOURCE

BEGIN
Declare Continue Handler For SQLSTATE '22007'
Return Date('9999-12-31');
Return Cast(ParDate as Date);
END ;


Aufruf:

Select CvtChar2Date(YourDatum)
From yourTable;

Birgitta

Fuerchau
15-12-13, 15:23
Ein "return NULL" im Fehlerfall wäre ggf. sinnvoller.