Anmelden

View Full Version : Datum die xte + 1 SQL V5R4



KingofKning
25-07-14, 10:48
Hallo *all,

ich muß per SLQ eine Tabelle in dem das Datum im Format 20000725 drinsteht darauf hin prüfen, ob dieses Datum größer/gleich als das Tagesdatum ist.

Die Funktion date(feldname) >= (current date) funktioniert auch ganz gut, ich bekomme aber beim 6.000 Satz einen Fehler QRY2283 Datenzuordnungsfehler.

Ich habe in den Datumsfeld auch Werte im Format 99999999 die undendlich bedeuten sollen (immer gültig)

Ich vermute ja mal das er darüber stolpert. (Query verarbeitet es übrigens klaglos)

Was kann ich tun um die Sätze doch zu bekommen?

GG

Fuerchau
25-07-14, 10:56
date(case when Feld > 99991231 then 99991231 else Feld end)
In Query400 geht das halt nicht, in diesem Fall eine View erstellen, die diesen Ausdruck enthält.

Pikachu
25-07-14, 11:09
Du könntest das Tagesdatum an das Format des Feldes anpassen, zum Beispiel so:

YEAR(CURRENT DATE)*10000 + MONTH(CURRENT DATE)*100 + DAY(CURRENT DATE)

KingofKning
25-07-14, 12:22
Also irgendwie ist da noch der Wurm drin.

Die Daten sehen so aus:

Tja kaum schreibt man es auf sieht man auch den Fehler.....

Tja Pustekuchen, läuft zwar jetzt länger, bekomme aber folgende Meldung:
Ein SELECT/OMIT-Fehler ist in Satz 274025, Satzformat

Wie kann ich mir genau diesen Satz anzeigen lassen? Bzw. wenn da was ungültiges drinsteht den Fehler umgehen?

GG

Pikachu
25-07-14, 12:59
SELECT * FROM Bibliothek/Datei WHERE RRN(Datei) = 274025

Robi
25-07-14, 12:59
select * from datei where rrn(datei) = 274025

KingofKning
25-07-14, 13:11
Danke,
in den Sätzen steht dann folgendes:

20.081.231
20.081.231
20.081.231
20.081.231
20.002.003
20.002.003
Die ersten mit 31.12.2008 machen ja noch Sinn, nur 03.20.2000 macht ja dann keinen Sinn.
Wie kann ich denn so einen Müll (Ich liebe Programme ohne Plausibilitätskontrolle) weiter verarbeiten?

GG

PS. Habe jetzt mal eine and > 20100101 davor gehängt, und die scheint dank Optimierung die weiteren Umsetzung nicht mehr zu mache, sprich der SQL fällt nicht auf die Nase.

Heißt ja dann wenn ich mit

and Monat < =12 and Tag <= 31

arbeite das ich den gröbsten Müll aus dem Weg gehe.

Pikachu
25-07-14, 13:16
Du könntest, wie weiter oben geschrieben, das Tagesdatum einmalig an das Format des Feldes anpassen.

Dadurch kannst du beide ganz einfach numerisch miteinander vergleichen, zum Beispiel so:

SELECT * FROM Datei

WHERE Feld >= YEAR(CURRENT DATE)*10000 + MONTH(CURRENT DATE)*100 + DAY(CURRENT DATE)

KingofKning
25-07-14, 15:45
Du mußt ja nicht meinen, nur weil Du es klar und deutlich schreibst würde der andere es auch sofort verstehen.....

Jetzt beim 2. Mal habe ich es verstanden, und es läuft...

manchmal sollte man früher eine Pause machen....

Danke

GG