आप CASE अभिव्यक्तियों में डेटाटाइप्स को मिश्रित नहीं कर सकते हैं (या कम से कम इस बात का ध्यान रखे बिना कि वे परोक्ष रूप से OK कर देंगे)
जब निम्नलिखित SQL सर्वर की तरह एक बयान के साथ सामना किया जाएगा, तो यह निर्धारित करने के लिए डेटाटाइप प्राथमिकता का उपयोग करेगा कि अभिव्यक्ति का समग्र डेटाटाइप क्या होना चाहिए
SELECT CASE WHEN 1=1 THEN 'not-a-date' ELSE getdate() END
उपरोक्त के लिए datetime
char
. की तुलना में उच्च प्राथमिकता है इसलिए यह परोक्ष रूप से स्ट्रिंग को उस तारीख तक कास्ट करता है जो विफल हो जाती है।
फ़ोलोइंग सफल होता है हालांकि sql_variant
. के रूप में एक उच्च प्राथमिकता है
SELECT CASE WHEN 1=1 THEN cast('not-a-date' as sql_variant) ELSE getdate() END
तो आप इस तरह से कई मिश्रित डेटाटाइप वापस कर सकते हैं (मुझे यकीन नहीं है कि sql_variant
कितना आसान है हालांकि साथ काम करना है)
इसके अलावा आप NULL
return वापस कर सकते हैं बकवास डेटा वापस करने के बजाय अमान्य डेटाटाइम के लिए या यदि आपको इसे वापस करना होगा तो सब कुछ एक स्ट्रिंग में डाल दें।