PDA

View Full Version : mit sql falsche daten lesen



ILEMax
08-07-21, 12:24
Moin zusammen,
Wir haben in einer Datei das Datum in 3 Feldern JJJJ MM TT.
in den alt Daten gibt es ungülltig Werte wie 31.06. oder 31.04. oder 95.02. ...

Wie müsste ein sql aussehen, wenn ich nur die falschen haben will?
Ginge das?
(Bei fast 98 Mio. Datensätzen sicher ein verständlicher Wunsch)

select * from Datei where date(digits(jjjj) concat '-' concat digits(mm) concat'-' concat digits(tt)) is null

ist abgebrochem mit Auswahlfehler für Feld *N

Danke Euch
der ILEMax

Fuerchau
08-07-21, 16:58
Eben ohne Date(), da der Cast bei ungültigen Daten auf die Nase fällt und aufhört.
Du musst eine Kalendertabelle anlegen, die halt nur die gültigen Werte enthält sowie die 3-Teilung der Felder, Also Date, JJJJ, MM, DD.
Dann machst du einen Index über JJJJ, MM, DD.
Anschliessend machst du einen
select * from a
exception join from kalender using (jjjj, mm, dd)

Exception entspricht dem "where not exists".

Using = Kurzform des join on, wenn die Namen auf beiden Seiten identisch sind.

BenderD
09-07-21, 06:14
... sieh dir mal iDate auf think400 an. Das ist eine SQL function zur Konvertierung von allen möglichen Huddeldatümmern, das bei Dummfug null zurückgibt, was man dann abfragen kann, ohne dass es einen Abbruch gibt.

D*B

B.Hauser
10-07-21, 08:01
Du kannst auch die folgende Funktion verwenden.
CvtYYYY_MM_DD2Date (https://gist.github.com/BirgittaHauser/2c45626c9839ab8c45fe1efb553bf8d5)
Einmal erstellt kannst Du Sie in den WHERE-Bestimmungen einsetzen und explizit auf das Datum 8888-12-31 abfragen.
Die Funktion kann natürlich nach Bedarf auch modifiziert und auch anderweitig verwendet werden.