PDA

View Full Version : SQL Fehlersuche Behebungsstrategie



Seiten : [1] 2

KingofKning
07-09-10, 09:09
Hallo *all,

ich habe hier eine simple Abfrage die auf die Nase fällt.

select * from stddat where wrtdat = (current date)

Fehlermeldung ist:
Ursache . . . . : Die Abfrage wurde nicht ausgeführt, da ein
Vergleichsoperand auf Daten aus Feld *N (in Satz 6246 der Datei STDDAT in
Bibliothek XXX, die nicht gleich *N sind,) zugreift. Die Daten aus Feld *N
sind nicht notwendigerweise falsch, da es sich bei dem Operanden
möglicherweise um einen Ausdruck handelt, der neben Feld *N auch andere...

und

SELECT/OMIT-Fehler in Feld (Cast((Has Date/Time
formatting)DbopExprKey(MEST08, STDDAT_1.WRTDAT¬158|, 7), Char Fixed Len
8 Pad(x40,x4040)) AS Date), Teildatei STDDAT.

Tja, das sieht dann so aus das im Satz 6246 kein Datum drin steht.
Meine Frage,
wie kann ich gezielt den Satz 6246 abfragen bzw. was müßte ich tun damit der select trotzdem läuft evtl. unter Auslassung des/der fehlerhaften Sätze.

GG

BenderD
07-09-10, 09:23
http://www.think400.dk/files/idate.zip
könnte dein Freund sein (ich habe es nicht probiert, bei mir gibt es keine Huddelfelder mit Dadümmern)

D*B

KingofKning
07-09-10, 09:54
Danke für die Kanone, aber gibt es auch ne andere Möglichkeit den Spatz zu erwischen?

Wobei ich habe mir die Daten jetzt nochmals angesehen und dort steht:

RRN ( STDDAT ) WrtDat
6.246 20100803

Das müßte doch passen oder?

GG

B.Hauser
07-09-10, 09:59
WRTDAT ist ein numerischer Wert oder ein alphanumerischer Wert, während CURRENT_DATE ein echtes Datum ist.

Du musst entweder WRTDAT in ein echtes Datum verwandeln oder Current_Date in einen numerischen oder alphanumerisch Vergleichswert.

Birgitta

andreaspr@aon.at
07-09-10, 10:08
Ich weis nicht ob sich die Satznummer 6246 auf die RRN bezieht.
Probier mal eine Abfrage mit
Where WrtDat < 19000000 and WrtDat >2100000 and WrtDat is null

Eventuell dass NULL-Werte erlaubt sind und diese Probleme machen?

BenderD
07-09-10, 10:28
@passen: 2010-08-03 würde für automatischen cast passen, ohne Trennstriche eben nicht
@Kanone: wenn der Spatz überspringen heißt, dann geht das nicht ohne eine eigene UDF

D*B


Danke für die Kanone, aber gibt es auch ne andere Möglichkeit den Spatz zu erwischen?

Wobei ich habe mir die Daten jetzt nochmals angesehen und dort steht:

RRN ( STDDAT ) WrtDat
6.246 20100803

Das müßte doch passen oder?

GG

Fuerchau
09-09-10, 10:48
Immer wieder die selbe Frage aber anders formuliert.
Ein Datum kann nur abgefragt werden, wenn das Format links und rechts passt.
Als entweder das Feld in ein Datum umwandeln oder den Vergleichswert in eine Zahl:

a)
date(
substr(digits(datefield), 1, 4) concat '-' concat
substr(digits(datefield), 5, 2) concat '-' concat
substr(digits(datefield), 7, 2)
) = current date

b)
datefield =
year(current date) * 10000 +
month(current date) * 100 +
day(current date)

BenderD
09-09-10, 11:03
... triffts nicht, es gibt durchaus implizite Konvertierungen. der casus knaxus ist, ob die Konvertierung gelingt, wenn man dem Cast Schotter anbietet, geht es eben wieder in den Wind - da eiert DB2/400 ziemlich rum, weshalb es jetzt wohl auch DB2 for I heißt.

D*B


Immer wieder die selbe Frage aber anders formuliert.
Ein Datum kann nur abgefragt werden, wenn das Format links und rechts passt.
Als entweder das Feld in ein Datum umwandeln oder den Vergleichswert in eine Zahl:

a)
date(
substr(digits(datefield), 1, 4) concat '-' concat
substr(digits(datefield), 5, 2) concat '-' concat
substr(digits(datefield), 7, 2)
) = current date

b)
datefield =
year(current date) * 10000 +
month(current date) * 100 +
day(current date)

KingofKning
09-09-10, 13:43
Immer wieder die selbe Frage aber anders formuliert.
Ein Datum kann nur abgefragt werden, wenn das Format links und rechts passt.


Du hast Recht, aber meiner Meinung nach ist das auch ein Problem des Suchen und des Finden.
Hier im Forum sind viele Antworten schon mal gegeben worden, aber wenn Du als Anfänger nicht weißt wonach Du suchen sollst und nur z.B. Datum eingibst brauchst man sich nicht über 1.000 Antworten zu wundern wovon 999 nicht das sind was man braucht.

Vielleicht sollte man mal Holgers Wikipedia aufrüsten um solche Probleme mit Lösungen sauber zu hinterlegen.

Aber wer machts, wer koordiniert es und wie lange wirds gemacht.........

So muß man halt Verständnis haben das die eine oder andere Frage schon mal so ähnlich gestellt wurde und trotzdem der Fragesteller die richtige Antwort nicht findet.

Aber Gott sei Dank herrscht hier im Forum ein vernünftiger Ton und die Hinweise sind meistens fundiert und blöde Kommentare extrem selten.

GG

Der sein Problem dank Forum gelöst hat.

holgerscherer
09-09-10, 13:55
Vielleicht sollte man mal Holgers Wikipedia aufrüsten um solche Probleme mit Lösungen sauber zu hinterlegen.
Aber wer machts, wer koordiniert es und wie lange wirds gemacht.........


Nicht fragen, wer es macht, sondern machen. Mein Zeitbudget gibt derzeit halt nix her.

-h