यह वही कर सकता है जिसकी आपको तलाश है:
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
मानक आईएसओ फॉर्म 'YYYY-MM-DD' में है, बल्कि इसके बजाय सिर्फ कास्ट करें:t.Date = _t::date
।
- मानों के लिए सिंगल कोट्स :
-
फ़ंक्शन बॉडी के अंदर आउटपुट कॉलम नाम दिखाई दे रहे हैं। एक ही नाम का टेबल-क्वालिफाई कॉलम। बेहतर अभी तक, शुरू करने के लिए इस तरह के संघर्षों का नामकरण करने से बचें! देखें:
-
EXECUTE
. के साथ डायनेमिक SQL की कोई आवश्यकता नहीं है . डेटा मान पास करना सादे SQL के साथ ठीक काम करता है। - plpgsql की कोई आवश्यकता नहीं है। सरल क्वेरी के लिए किसी प्रक्रियात्मक कार्यक्षमता की आवश्यकता नहीं होती है।
LANGUAGE sql
काम करता है - अगर आपको किसी फ़ंक्शन की बिल्कुल भी ज़रूरत है, तो सादा SQL नौकरी के लिए ठीक लगेगा।
इसके अलावा:पहचानकर्ता के रूप में "तारीख" जैसे मूल प्रकार के नामों का उपयोग न करें। कानूनी, लोअर केस आइडेंटिफ़ायर से चिपके रहें। संबंधित: