Anmelden

View Full Version : Select Abfrage now() läuft auf Fehler



Seiten : 1 2 [3]

B.Hauser
09-02-13, 15:33
Ich weiß nicht wo und wie Du das SQL-Statement einbindest bzw. aufrufst!

Du solltest das numerische Tagesdatum - 2 Tage außerhalb des SQL Statements ermitteln und dann als (Host)Variable in das SQL-Statement einbinden.


AND TPDTE > :HostVarDate

Sollte dies nicht möglich sein, solltest Du Dein Select-Statement dahingehend verändern, dass das numerische Datum direkt mit dem numerischen Wert des laufenden Datums - 2 Tage verglichen wird:


AND TPDTE > Dec(VarChar_Format(Current_Timestamp - 2 days, 'YYYYMMDD'), 8, 0)

Vor Release 6.1 konnte der Query Optimizer nur Indices verwenden, die über Original-Spalten/Felder gebildet wurden.

Sobald auf der linken Seite des Vergleichsoperators skalare Funktionen verwendet werden, wird die "Original"-Spalte verändert und der Query Optimizer kann für diese Spalte keinen Index mehr verwenden. Das kann dazuführen, dass anstatt eines Index-Access (Zugriff über Schlüssel) ein Table-Scan (ganze Tabelle wird gelesen) erfolgt.

Ab 6.1 können Indices über "konstruierte" Felder gebildet werden, die dann u.U. auch vom Optimizer genutzt werden können (von IBM noch nicht vollständig realisiert!)

Birgitta

svt
10-02-13, 13:17
Hallo Birgitt,

wir haben Release 5, ich habe folgenden
Code getestet:

AND TPDTE > Dec(VarChar_Format(Current_Timestamp - 2 days, 'YYYYMMDD'), 8, 0)Es kam die Fehlermeldung: "...SQL0171- Argument 2 der Funktion VarChar_Format ungültig"

Die erste Variante interresiert mich sehr:

AND TPDTE > :HostVarDateWenn ich das richtig verstehe kann ich das Vergleichs-Datum direkt aus einer Exceldatei (A1) ziehen. Das wäre genau mein Ding da ich mitlerweile diese gewünschten Daten über eine ODBC-Verbindung in Excel Abfrage!!!

Mein Problem (da ich noch Anfänger bin!!!) ist, wie binde ich die Exceldatei (Zelle A1, mit den gewünschten Datum)
in das SQL-Statement ein????
Kannst Du mir hier helfen????
Danke

Fuerchau
11-02-13, 10:38
VarChar_Format gibt es in V5 noch nicht.
Ich glaube, aber Replace müsste es schon geben:

dec(replace(char(current date - 2 days, iso), '-', ''), 8, 0)

Wenn das nich geht, kannst du natürlich in einer Excelzelle das Format als JJJJMMTT vorbereiten.

In deiner Abfrage verwendest du dann ein "?" als Parameter.
Über die Abfrageeigenschaften kannst du dann jedem Parameter eine Excel-Zelle zuweisen.

svt
11-02-13, 19:49
Hallo Fuerchau,

danke für deinen Tip funktioniert auch
aber dauert auch extrem lange. Das mit
den "?" als Parameter habe ich leider nicht
hinbekommen, kannst Du mir als Laien das genauer erklären????

Danke