2010-05-11 6 views
6

Ich muss einige Zeitstempel Spalten in einer Tabelle in einer Postgres (8.3) Datenbank aktualisieren. schauenPostgreSQL - Variablen binden und Datum hinzufügen

Meine Anfrage (vereinfacht) wie folgt aus:

update table1 set dateA = dateA + interval '10 hours' where id = 1234; 

Dieser Teil eines Skripts ist und es gibt eine Menge zu aktualisieren, so meine Vorliebe ist Bind-Variablen zu verwenden, anstatt zu haben, um die Query-String zu bauen jedes Mal. Das bedeutet, meine Abfrage wird:

update table1 set dateA = dateA + interval '? hours' where id = ?; 

Wenn ich das tue, die Beschwerde ist, dass ich 2 Bind-Variablen angegeben haben, wenn nur eine erforderlich ist.

Wenn ich versuche, die ? außerhalb der Anführungszeichen zu setzen:

update table1 set dateA = dateA + interval ? ' hours' where id = ?; 

ich:

... syntax error at or near "' hours'" 

Es sieht aus, als ob die Abfrage als

interpretiert wurde
... dateA = dateA + interval '10' ' hours' ... 

Ich kann nichts in der Dokumentation finden, um zu helfen ... irgendwelche Vorschläge?

Dank

Antwort

8

Try this:

update table1 set dateA = dateA + ((interval '1 hours') * ?) where id = ?; 

Oder diese:

update table1 set dateA = dateA + cast(? || ' hours' as interval) where id = ?; 
+0

Dank - beide zu offensichtlich !!! – azp74