Ich habe eine PostgreSQL-Funktion, die den Datumsunterschied berechnet:
%Vor% Wenn Datumsangaben direkt subtrahiert werden, wird die Differenz berechnet. Aber in meinem Fall sind Daten in Variablen wie startDate
und endDate
vorhanden, was das Problem verursacht.
Wie kann ich Daten in Variablen subtrahieren?
Was Ihre Funktion macht, könnte viel einfacher gemacht werden. Der eigentliche Grund für den Syntaxfehler ist hier:
%Vor% Es sieht so aus, als ob du startDate
auf timestamp
werfen willst, was zunächst Unsinn ist, weil dein Parameter startDate
bereits als timestamp
deklariert ist.
Es funktioniert auch nicht. Ich zitiere das Handbuch hier :
Um syntaktische Mehrdeutigkeiten zu vermeiden, kann der Typ "String" -Syntax nur sein Wird verwendet, um den Typ einer einfachen Literalkonstante anzugeben.
Es würde so funktionieren:
%Vor% Aber das würde immer noch nicht viel Sinn machen. Sie sprechen von "Daten", definieren aber Ihre Parameter immer noch als timestamp
. Sie könnten das, was Sie so haben, bereinigen:
DECLARE
wird nur einmal benötigt. date
Spalten deklariert als richtiger Typ date
. @
. Seit das Subtrahieren von Daten (im Gegensatz zum Subtrahieren von Zeitstempeln , das ein interval
ergibt) bereits integer
ergibt, vereinfachen Sie:
Oder noch einfacher als plpgsql Zuweisung:
%Vor%Sie können die einfache Aufgabe mit einer einfachen Abfrage lösen - mit einer Unterabfrage:
%Vor% Oder Sie könnten CROSS JOIN
die Basistabelle zu sich selbst machen (1 Reihe von jeder Instanz, also ist das in Ordnung):
Wenn Sie auf eine Funktion für diesen Zweck bestehen, verwenden Sie eine einfache SQL-Funktion:
%Vor%Anruf:
%Vor%Wenn Sie auf plpgsql bestehen ...
%Vor%Gleicher Anruf.
Ich würde die Abfrage so schreiben:
%Vor% Der Unterschied zwischen der Verwendung von :=
und into
im obigen Kontext besteht darin, dass die Verwendung von :=
Ihrer Abfrage einen einzelnen Wert zurückgeben muss. Wenn Sie into
verwenden, kann Ihre Abfrage eine einzelne Zeile (d. H. Mehr als eine Spalte) zurückgeben.
Für eine vollständige Erklärung der Verwendung von select
mit into
und plpgsql sollten Sie Ссылка lesen . Insbesondere Abschnitt 39.5.3 der PostgreSQL-Dokumentation.
Tags und Links sql datetime postgresql postgresql-9.1 plpgsql