Detta kan göra vad du letar 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;
-
Uttrycket
where to_date(Date, "YYYY-MM-DD")==%I',_t);
är baklänges på flera sätt.- Enstaka citattecken för värden :
'YYYY-MM-DD'
. - Operatorn är
=
, inte==
. - Det verkar som om du verkligen vill ha
t.Date = to_date(_t, 'YYYY-MM-DD')
- Och medan
_t
är i standard ISO-format 'ÅÅÅÅ-MM-DD', hellre bara casta istället:t.Date = _t::date
.
- Enstaka citattecken för värden :
-
Utdatakolumnnamn är synliga inuti funktionskroppen. Tabellkvalificerad kolumn med samma namn. Ännu bättre, undvik att namnge sådana konflikter till att börja med! Se:
-
Inget behov av dynamisk SQL med
EXECUTE
. Att skicka ett datavärde fungerar bara fint med vanlig SQL. - Inget behov av plpgsql. Den enkla frågan kräver ingen procedurfunktionalitet.
LANGUAGE sql
gör jobbet - om du behöver en funktion överhuvudtaget skulle vanlig SQL verka bra för jobbet.
Bortsett från:använd inte grundläggande typnamn som "datum" som identifierare. Håll dig till lagliga, gemener identifierare. Relaterat: