Dette kan gøre det, du leder efter:
CREATE OR REPLACE FUNCTION foo(_t text)
RETURNS TABLE (Stage_ID bigint, Date varchar) AS
$func$
SELECT t.Stage_ID, t.Date
FROM tbl t
WHERE t.Date = _t::date;
$func$ LANGUAGE sql;
-
Udtrykket
where to_date(Date, "YYYY-MM-DD")==%I',_t);
er baglæns på flere måder.- Enkelte anførselstegn for værdier :
'YYYY-MM-DD'
. - Operatøren er
=
, ikke==
. - Det ser ud til, at du virkelig vil have
t.Date = to_date(_t, 'YYYY-MM-DD')
- Og mens
_t
er i standard ISO-form 'ÅÅÅÅ-MM-DD', cast i stedet for:t.Date = _t::date
.
- Enkelte anførselstegn for værdier :
-
Outputkolonnenavne er synlige inde i funktionsteksten. Tabelkvalificerer kolonne af samme navn. Endnu bedre, undgå at navngive konflikter som den til at begynde med! Se:
-
Intet behov for dynamisk SQL med
EXECUTE
. At sende en dataværdi fungerer fint med almindelig SQL. - Intet behov for plpgsql. Den simple forespørgsel kræver ingen proceduremæssig funktionalitet.
LANGUAGE sql
udfører jobbet - hvis du overhovedet har brug for en funktion, ville almindelig SQL virke helt fint til jobbet.
Bortset fra:Brug ikke grundlæggende typenavne som "dato" som identifikator. Hold dig til lovlige identifikatorer med små bogstaver. Relateret: