Dies könnte das tun, wonach Sie suchen:
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;
-
Der Ausdruck
where to_date(Date, "YYYY-MM-DD")==%I',_t);ist in mehrfacher Hinsicht rückwärts.- Einfache Anführungszeichen für Werte :
'YYYY-MM-DD'. - Der Operator ist
=, nicht==. - Sieht so aus, als wollten Sie wirklich
t.Date = to_date(_t, 'YYYY-MM-DD') - Und während
_tist in der Standard-ISO-Form 'YYYY-MM-DD', statt dessen einfach umzuwandeln:t.Date = _t::date.
- Einfache Anführungszeichen für Werte :
-
Die Namen der Ausgabespalten sind im Funktionskörper sichtbar. Tabellenqualifizierende Spalte mit demselben Namen. Besser noch, vermeiden Sie solche Namenskonflikte von vornherein! Siehe:
-
Keine Notwendigkeit für dynamisches SQL mit
EXECUTE. Das Übergeben eines Datenwerts funktioniert nur mit einfachem SQL. - plpgsql ist nicht erforderlich. Die einfache Abfrage erfordert keine prozedurale Funktionalität.
LANGUAGE sqlmacht den Job - wenn Sie überhaupt eine Funktion brauchen, scheint einfaches SQL für den Job gut geeignet zu sein.
Übrigens:Verwenden Sie keine einfachen Typnamen wie "Datum" als Bezeichner. Halten Sie sich an gültige Kleinbuchstaben. Verwandte: