AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Postgres: interval als ParamByName
Thema durchsuchen
Ansicht
Themen-Optionen

Postgres: interval als ParamByName

Ein Thema von Incocnito · begonnen am 28. Feb 2022 · letzter Beitrag vom 28. Feb 2022
Antwort Antwort
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#1

Postgres: interval als ParamByName

  Alt 28. Feb 2022, 14:38
Datenbank: postgres • Version: 10.4 • Zugriff über: MyDac
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:
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};
funktioniert, aber

Delphi-Quellcode:
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';
geht nicht.

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
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#2

AW: Postgres: interval als ParamByName

  Alt 28. Feb 2022, 16:37
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:
Query.SQL.Text := 'SELECT * FROM Tab1 WHERE (status = :iStatus) AND (ts_create <= (current_timestamp + :sInterval::interval))';
::interval ist dabei eine Typangabe. Die genauso im finalen SQL erscheint/erscheinen muss.

Ausgewertet also auf PG-Seite:
Code:
Query.SQL.Text := 'SELECT * FROM Tab1 WHERE (status = <irgendeinStatusWert>) AND (ts_create <= (current_timestamp + '1 days'::interval))';
Mglw. kollidiert das wiederum mit der Parameter Handhabung von Delphi, da bin ich etwas raus. Das kann man glaub ich irgendwie umgehen / variieren.
Gruß, Jo
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
223 Beiträge
 
#3

AW: Postgres: interval als ParamByName

  Alt 28. Feb 2022, 17:09
Moin!

An die Typkonvertierung hatte ich gar nicht mehr gedacht!
Das läuft wie nix gutes! Besten Dank!

Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#4

AW: Postgres: interval als ParamByName

  Alt 28. Feb 2022, 18:04
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.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz