Ini mungkin melakukan apa yang Anda cari:
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;
-
Ekspresi
where to_date(Date, "YYYY-MM-DD")==%I',_t);
mundur dalam berbagai cara.- Kutipan tunggal untuk nilai :
'YYYY-MM-DD'
. - Operatornya adalah
=
, bukan==
. - Sepertinya Anda sangat menginginkan
t.Date = to_date(_t, 'YYYY-MM-DD')
- Dan sementara
_t
dalam bentuk ISO standar 'YYYY-MM-DD', alih-alih hanya dilemparkan:t.Date = _t::date
.
- Kutipan tunggal untuk nilai :
-
Nama kolom keluaran terlihat di dalam badan fungsi. Kolom kualifikasi tabel dengan nama yang sama. Lebih baik lagi, hindari konflik penamaan seperti itu sejak awal! Lihat:
-
Tidak perlu SQL dinamis dengan
EXECUTE
. Melewati nilai data berfungsi dengan baik dengan SQL biasa. - Tidak perlu plpgsql. Kueri sederhana tidak memerlukan fungsionalitas prosedural apa pun.
LANGUAGE sql
melakukan pekerjaan - jika Anda membutuhkan fungsi sama sekali, SQL biasa akan tampak baik-baik saja untuk pekerjaan itu.
Selain:jangan gunakan nama tipe dasar seperti "tanggal" sebagai pengenal. Tetap berpegang pada pengidentifikasi huruf kecil yang legal. Terkait: