![]() |
Datenbank: postgres • Version: 10.4 • Zugriff über: MyDac
Postgres: interval als ParamByName
Moin zusammen.
Ich brauche mal einen kurzen Tipp: Wenn ich eine SQL-Abfrage mit Werten fülle nutze ich eigendlich immer ParamByName. Bei dem Wert hinter "interval" klappt das aber nicht.
Delphi-Quellcode:
funktioniert, aber
Query.SQL.Text := 'SELECT * FROM Tab1 WHERE (status = :iStatus) AND (ts_create <= (current_timestamp + interval ''-1 days''))';
Query.ParamByName('iStatus').AsInteger := MY_FUNNY_STATE{2};
Delphi-Quellcode:
geht nicht.
Query.SQL.Text := 'SELECT * FROM Tab1 WHERE (status = :iStatus) AND (ts_create <= (current_timestamp + interval :sInterval))';
Query.ParamByName('iStatus').AsInteger := MY_FUNNY_STATE{2}; Query.ParamByName('sInterval').AsString := '-1 days'; Ist jetzt nicht die richtige SQL, aber man sieht worauf ich hinaus will. Ich hoffe da hat sich jetzt kein Tippfehler eingeschlichen, der einen auf eine falsche Spur lockt. Was ist der Trick bei Postgres-interval? Liebe Grüße Incocnito |
AW: Postgres: interval als ParamByName
Ich konnte mich noch nie mit dieser seltsamen Notation von Zeit/Datumswerten. Aber vielleicht ist es sogar ein ANSI Standard.
Interessant wäre, welche Fehlermeldung Du bekommst. Ansonsten nur geraten, versuch mal:
Code:
::interval ist dabei eine Typangabe. Die genauso im finalen SQL erscheint/erscheinen muss.
Query.SQL.Text := 'SELECT * FROM Tab1 WHERE (status = :iStatus) AND (ts_create <= (current_timestamp + :sInterval::interval))';
Ausgewertet also auf PG-Seite:
Code:
Mglw. kollidiert das wiederum mit der Parameter Handhabung von Delphi, da bin ich etwas raus. Das kann man glaub ich irgendwie umgehen / variieren.
Query.SQL.Text := 'SELECT * FROM Tab1 WHERE (status = <irgendeinStatusWert>) AND (ts_create <= (current_timestamp + '1 days'::interval))';
|
AW: Postgres: interval als ParamByName
Moin!
An die Typkonvertierung hatte ich gar nicht mehr gedacht! Das läuft wie nix gutes! Besten Dank! Liebe Grüße Incocnito |
AW: Postgres: interval als ParamByName
Prima.
Als Ergänzung: Solange man nur Tage zu einem Datum(sTyp) addieren will, geht auch: <meinDatumsWert> + <Tag> Date + Integer myDate + :intParam Das finde ich ziemlich intuitiv, leider ist diese Operation nur für Date plus Integer, nicht für DateTime Werte + Integer definiert. Und auch nicht für Zeitanteile eines Tages. eine andere Variante ist: <meinTimestampWert> + Interval('1 days') * :intParam usw. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz