Toto může dělat to, co hledáte:
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;
-
Výraz
where to_date(Date, "YYYY-MM-DD")==%I',_t);
je několika způsoby zpět.- Jednoduché uvozovky pro hodnoty :
'YYYY-MM-DD'
. - Operátor je
=
, nikoli==
. - Zdá se, že opravdu chcete
t.Date = to_date(_t, 'YYYY-MM-DD')
- A zatímco
_t
je ve standardním formátu ISO 'YYYY-MM-DD', raději místo toho přeneste:t.Date = _t::date
.
- Jednoduché uvozovky pro hodnoty :
-
Názvy výstupních sloupců jsou viditelné uvnitř těla funkce. Sloupec kvalifikující tabulku se stejným názvem. Ještě lépe, vyhněte se konfliktům v pojmenování pro začátek! Viz:
-
Není potřeba dynamické SQL s
EXECUTE
. Předávání datové hodnoty funguje stejně jako u prostého SQL. - Není potřeba plpgsql. Jednoduchý dotaz nevyžaduje žádnou procedurální funkčnost.
LANGUAGE sql
odvede svou práci – pokud vůbec nějakou funkci potřebujete, obyčejné SQL by se pro tuto úlohu zdálo v pořádku.
Stranou:nepoužívejte základní názvy typů jako „datum“ jako identifikátor. Držte se legálních identifikátorů s malými písmeny. Související: