これはあなたが探していることをするかもしれません:
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;
-
式
where to_date(Date, "YYYY-MM-DD")==%I',_t);
複数の方法で後方にあります。- 値の単一引用符 :
'YYYY-MM-DD'
。 - 演算子は
=
です 、==
ではありません 。 - 本当に必要なようです
t.Date = to_date(_t, 'YYYY-MM-DD')
- そして
_t
標準のISO形式「YYYY-MM-DD」であり、代わりにキャストするだけです:t.Date = _t::date
。
- 値の単一引用符 :
-
出力列名は、関数本体内に表示されます。同じ名前のテーブル修飾列。さらに良いことに、そもそもそのような名前の競合は避けてください。参照:
-
EXECUTE
を使用した動的SQLは必要ありません 。データ値を渡すことは、プレーンSQLでうまく機能します。 - plpgsqlは必要ありません。単純なクエリには、手続き型の機能は必要ありません。
LANGUAGE sql
仕事をします-関数が必要な場合は、プレーンSQLで問題ないように見えます。
余談ですが、「日付」などの基本的な型名を識別子として使用しないでください。正当な小文字の識別子に固執します。関連: