मैं बस इसी तरह की समस्या से जूझ रहा था, लेकिन एक समारोह के ऊपरी हिस्से को नहीं चाहता था। मैं निम्नलिखित प्रश्न के साथ आया:
SELECT myfield::integer FROM mytable WHERE myfield ~ E'^\\d+$';
पोस्टग्रेज इसके कंडीशन को शॉर्टकट करता है, इसलिए आपको अपने ::integer कास्ट को हिट करने वाला कोई गैर-पूर्णांक नहीं मिलना चाहिए। यह NULL मानों को भी संभालता है (वे regexp से मेल नहीं खाएंगे)।
यदि आप चयन न करने के बजाय शून्य चाहते हैं, तो CASE कथन कार्य करना चाहिए:
SELECT CASE WHEN myfield~E'^\\d+$' THEN myfield::integer ELSE 0 END FROM mytable;