2012-04-18 18 views
12

मेरे पास 2 शून्य CHAR कॉलम हैं और मुझे यह जांचने की आवश्यकता है कि उनमें से केवल शून्य है।टिकाऊ तार्किक एक्सओआर शून्य मूल्यों के लिए

कर

(a IS NULL AND b IS NOT NULL) OR (a IS NOT NULL AND b IS NULL) 

उबाऊ है। और मैं इसके लिए कस्टम फ़ंक्शंस बनाने से बचना चाहता हूं।

मैं कुछ के बारे में

COALESCE(a, 1) + COALESCE(b, 1) = 1 

लेकिन जब तक a रूप char है की तरह सोच रहा था - यह संकार्य प्रकार की त्रुटि का कारण बनता है।

तो, मुश्किल समाधान?

+2

कैसे COALESCE (ए, बी) = COALESCE (ख, एक) ':) गलत मान निकलेगा के बारे में' यदि 'एक = b'। http://www.sqlfiddle.com/#!1/9c33b/1 – mellamokb

+0

@mellamokb: एक अपवर्तनीय हकदार है, हालांकि 'चयन कोलेसेस (शून्य, शून्य) = coalesce (शून्य, शून्य)' वापस बूलियन नहीं देता है (जो कि नेतृत्व कर सकता है कुछ मामलों में त्रुटियां) – zerkms

उत्तर

25

तो तुम्हारा मतलब बिल्कुल एक शून्य है (जो आपके मौजूदा तर्क से मेल खाता है), तो:

a is null != b is null 
+2

+1 http://www.sqlfiddle.com/#!1/5199b/2 – mellamokb

+0

आश्चर्यचकित यह इतना आसान था :-) – zerkms

+0

@zerkms: मुझे इसे दोबारा जांचना पड़ा, इसलिए त्वरित हटाएं/undelete :) –

7

और तुम PostgreSQL उपयोग कर रहे हैं कोष्ठकों मत भूलना ...

ALTER TABLE "schema"."table" ADD CHECK ((key1 IS NULL) <> (key2 IS NULL)); 

(मैं लगभग 10 मिनट के समझने के लिए मेरी जांच के साथ गलत था की कोशिश कर बिताया।)

संबंधित मुद्दे