Escapen von Hochkommatas in Statement für sql2o und Postgre

Hallo ich habe ein Problem mit einem Postgre-Statement dem per sql2o Parameter verpasst werden. Hier der Teil des Statements der den Fehler verursacht:
[SQL]…date - interval’’ :timeZoneDiff milliseconds’’ >= :startDate::timestamp…[/SQL]
Das Problem ist, dass das Parameter ‘:timezoneDiff’ innerhalb der Hochkommatas gesetzt werden soll, dies wird von sql2o wenn ich doppelte(escapte) Hochkommatas nutze auch umgesetzt.
Allerdings wirft das Statement dann bei der Ausführung an der Stelle einen Fehler org.sql2o.Sql2oException: Database error: FEHLER: Syntaxfehler bei „$3“
Position: …
. Beim setzten von einfachen Hochkommatas bekomme ich beim Bauen des Statements einfach eine NullPointerException weil er das übergebenen Parameter nicht setzen kann.
Hat jemand eine Idee wie sich dies lösen ließe?
PS. Das Statement ist natürlich schon manuell getestet und läuft auf Postgre einwandfrei

vielleicht weiß jemand direkt von allem und fertigen Rat,
für allen anderen wie mich vielleicht der Reihe nach vorgehen mit möglichst einfachen Querys :wink:

was ist denn sql2o, nach kurzem ersten Link
Inserts and updates - sql2o
scheint das standardmäßig nicht von Anführungszeichen zu brauchen

und was planst du mit dem SQL an sich, etwas Richtung
PostgreSQL: Documentation: 9.3: Date/Time Functions and Operators

also z.B. select dateX - interval '2 hours' from tableY? warum auch immer


wie genau baust du das nun zusammen?
vielleicht ist ganz ohne Hochkommata der richtige Weg:
select dateX - interval :param from tableY
je nachdem was du zu übergeben gedenkst,
schon getestet?

mit
select dateX - interval ':param' from tableY
kommt also Exception bei sql2o?

auf gleich 2 oder 7 Hochkommata zu wechseln scheint jedenfalls nicht angebracht,
hast du dafür irgendeinen Grund außer es einfach zu probieren?

wenn sql2o nicht geht, dann deinstallieren, so einfach ist das :wink:


edit:
mit den ‚milliseconds‘ ist dein Konstrukt eher verständlich,
aber auch JDBC PreparedStatement und andere Frameworks kommen mit
select * from person where name = ':vorname Müller'
sicherlich nicht klar,

was willst du als Parameter übergeben, kann da milliseconds nicht mit dabei sein als String?

sonst vielleicht auf Parameter hier ganz zu verzichten und beim String-Zusammenbau des SQLs gleich richtig einfügen…,
oder mit String-Operationen ersetzen…

evtl. zusammenbaubar?
select dateX - interval :param || ' hours' from tableY
edit: sieht nicht so aus bei mir :wink:

[SQL]
interval’’ :timeZoneDiff’’
[/SQL]
Ich vermute einfach mal: sql2o macht bei .addParameter(“valParam”, foo) automatisch das richtige Escapen (so wie JDBC bei prepared Statements

in dem Fall geht das natürlich schief, weil der Text milliseconds Teil des Parameters ist, versuch doch mal

interval’ :timeZoneDiffAndUnit
.addParameter(":timeZoneDiffAndUnit",“30 milliseconds”)

d.h. den Text ‘milliseconds’ ZUSAMMEN mit dem Wert als Parameter verwenden…

Lösung:
Übergabe als String war eine gute Idee(habe ich versucht zu vermeiden, da ich ein Modul mit mehreren Datenbanken schreibe und Postgre jetzt einen Sonderweg geht, aber es funktioniert). Ich habe es jetzt wie folgt umgesetzt:

.addParameter("timeZoneDiff", (sqlServer.getTimeZoneDiffAsMillis(clientDateTimeZone)) + " milliseconds");
...```

[SQL]... date - :timeZoneDiff::interval <...[/SQL]
gleichbedeutend mit
[SQL]... date - interval:timeZoneDiff <...[/SQL]