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
_ter 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 sqludfø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: