यह वही कर सकता है जिसकी आपको तलाश है:
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 नौकरी के लिए ठीक लगेगा।
इसके अलावा:पहचानकर्ता के रूप में "तारीख" जैसे मूल प्रकार के नामों का उपयोग न करें। कानूनी, लोअर केस आइडेंटिफ़ायर से चिपके रहें। संबंधित: