Điều này có thể làm những gì bạn đang tìm kiếm:
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;
-
Biểu thức
where to_date(Date, "YYYY-MM-DD")==%I',_t);
ngược theo nhiều cách.- Các dấu ngoặc kép cho giá trị :
'YYYY-MM-DD'
. - Toán tử là
=
, không phải==
. - Có vẻ như bạn thực sự muốn
t.Date = to_date(_t, 'YYYY-MM-DD')
- Và trong khi
_t
ở dạng ISO tiêu chuẩn 'YYYY-MM-DD', thay vào đó chỉ truyền:t.Date = _t::date
.
- Các dấu ngoặc kép cho giá trị :
-
Tên cột đầu ra có thể nhìn thấy bên trong thân hàm. Cột điều kiện bảng cùng tên. Tốt hơn hết, hãy tránh đặt tên xung đột như vậy để bắt đầu! Xem:
-
Không cần SQL động với
EXECUTE
. Việc chuyển một giá trị dữ liệu chỉ hoạt động với SQL thuần túy. - Không cần plpgsql. Truy vấn đơn giản không yêu cầu bất kỳ chức năng thủ tục nào.
LANGUAGE sql
thực hiện công việc - nếu bạn cần một chức năng nào đó, thì SQL thuần túy có vẻ phù hợp với công việc.
Ngoài ra:không sử dụng tên loại cơ bản như "ngày" làm định danh. Bám sát vào số nhận dạng hợp pháp, viết thường. Có liên quan: