Discussion:
TimeStamp vergleichen mit db2
(zu alt für eine Antwort)
Matthias H.
2004-08-23 11:35:46 UTC
Permalink
Hi Leutz!

Ich muss bei in einer SQL-Klausel ein Datums-Feld mit dem
Current TimeStamp vergleichen. Das ganze unter db2-SQL,
sollte aber wenn möglich auch in anderen Datenbanken
funktionieren (Oracle, MSSQL).
Das sieht bisher bei mir so aus:

"...(VALIDAB < " + db.DBTimstampNow() + ")..."

VALIDAB ist ein Datums-Feld und db.DBTimstampNow() gibt
datenbankabhängig eine Funktion der Datenbank zurück, die
den aktuellen TimeStamp ausliest. Bei db2 wäre das
dann "current TimeStamp". Dabei kommt die Meldung:

"The data types of the operands for the operation '<' are
not compatible."

Will ich TimeStamp(Validab) vergleichen, heisst es, daß
es diese Funktion nicht gibt. Versuche ich es mit Cast
(Validab as TimeStamp) dann heisst es, daß das Date-Feld
nicht in ein TimeStamp-Feld gecastet werden kann...
Was mach ich nun?
Peter Fleischer
2004-08-23 13:06:58 UTC
Permalink
Matthias H. wrote:
...
Post by Matthias H.
Ich muss bei in einer SQL-Klausel ein Datums-Feld mit dem
Current TimeStamp vergleichen. Das ganze unter db2-SQL,
sollte aber wenn möglich auch in anderen Datenbanken
funktionieren (Oracle, MSSQL).
Matthias,
da wirst du Probleme bekommen, eine universelle datenbankunabhängige Lösung
zu bauen, da jede Datenbank einen eigenen Dialekt hat.
Post by Matthias H.
"...(VALIDAB < " + db.DBTimstampNow() + ")..."
Matthias,
warum nimmst du nicht Parameter-Objekte?

"...(VALIDAB < ?)..."
Post by Matthias H.
VALIDAB ist ein Datums-Feld und db.DBTimstampNow() gibt
datenbankabhängig eine Funktion der Datenbank zurück, die
den aktuellen TimeStamp ausliest. Bei db2 wäre das
"The data types of the operands for the operation '<' are
not compatible."
Welchem Typ gibt denn die DBTimstampNow-Funktion zurück? In deinem Kontext
müsste die Funktion einen String, einschließlich begrenzender Apostrophe
zurückzugeben.
Post by Matthias H.
Will ich TimeStamp(Validab) vergleichen, heisst es, daß
es diese Funktion nicht gibt. Versuche ich es mit Cast
(Validab as TimeStamp) dann heisst es, daß das Date-Feld
nicht in ein TimeStamp-Feld gecastet werden kann...
Was mach ich nun?
Stelle ein Date-Objekt bereit und nutze dieses in einem Parameter, der im
SQL-String wirksam wird.

Peter
Matthias H.
2004-08-27 14:02:37 UTC
Permalink
Post by Peter Fleischer
Matthias,
da wirst du Probleme bekommen, eine universelle
datenbankunabhängige Lösung
Post by Peter Fleischer
zu bauen, da jede Datenbank einen eigenen Dialekt hat.
Theoretisch richtig...
Post by Peter Fleischer
Matthias,
warum nimmst du nicht Parameter-Objekte?
siehe unten
Post by Peter Fleischer
Welchem Typ gibt denn die DBTimstampNow-Funktion zurück?
In deinem Kontext
Post by Peter Fleischer
müsste die Funktion einen String, einschließlich
begrenzender Apostrophe
Post by Peter Fleischer
zurückzugeben.
Korrekt. Der String wird datenbankabhängig ausgewählt und
zusammengesetzt. Daher auch keine Parameter.
Post by Peter Fleischer
Stelle ein Date-Objekt bereit und nutze dieses in einem
Parameter, der im
Post by Peter Fleischer
SQL-String wirksam wird.
So ähnlich war die Lösung...

Loading...