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
_tdalam 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 sqlmelakukan 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: