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 sqlgö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: