बहुत से लोग अंतर्निहित फ़ंक्शन ISNULL (X, Y) का उपयोग करते हैं, जो दूसरे के साथ पहले तर्क को प्रतिस्थापित करता है यदि यह (पहला) NULL है। कम आमतौर पर उपयोग किया जाने वाला उलटा अंतर्निहित फ़ंक्शन NULLIF (X, Y) है, जो NULL लौटाता है यदि पहला तर्क दूसरे के बराबर है। इन दोनों कार्यों के संयोजन से IF-ELSE या CASE-WHEN निर्माणों से बचा जाता है, जो कोड को अधिक कॉम्पैक्ट बनाता है। यदि आप कुछ उदाहरण देखना चाहते हैं, तो बिल्ली का स्वागत करें।
उदाहरण के लिए, यहां एक कोड है जो 1 से 37 तक की सीमा में 10 यादृच्छिक पूर्णांकों को आउटपुट करता है, और प्रदर्शित संख्या के बराबर या उससे अधिक निकटतम मान 6 के एक से अधिक है।
SELECT Q.Src, CASE WHEN Q.Src % 6 = 0 THEN Q.Src ELSE Q.Src + (6 - Q.Src % 6) END AS NextTimes6 FROM ( SELECT TOP 10 CONVERT(INT, 1 + 37 * RAND(CHECKSUM(NEWID()))) Src FROM SYSOBJECTS S ) Q
आप निम्नलिखित ट्रिक से CASE..WHEN से छुटकारा पा सकते हैं - NULL को अभिव्यक्ति के परिणाम में बदल दें। Q.Src% 6 यदि शेष 0 है, तो यह जानते हुए कि NULL के साथ किसी भी ऑपरेशन का परिणाम NULL है, और फिर NULL को बाहरी फ़ंक्शन के साथ 0 पर वापस लाना। IsNull:
SELECT Q.Src, Q.Src + ISNULL(6 - NULLIF(Q.Src % 6, 0), 0) AS NextTimes6 FROM ( SELECT TOP 10 CONVERT(INT, 1 + 37 * RAND(CHECKSUM(NEWID()))) Src FROM SYSOBJECTS S ) Q
एक और उदाहरण एक स्ट्रिंग को दो भागों में एक स्थान से विभाजित कर रहा है (उदाहरण के लिए, एक स्ट्रिंग से एक नाम <space> उपनाम। यहां "हेड ऑन" को हल करते समय एक विशिष्ट समस्या यह है कि केस के कट जाने के लिए वर्णों की संख्या के मान के रूप में -1 के तर्क को पास करते समय LEFT फ़ंक्शन क्रैश हो जाता है। जब सोर्स लाइन में कोई जगह नहीं है (CHARINDEX रिटर्न 0):
SELECT Q.Src, CASE WHEN CHARINDEX(' ', Q.Src) > 0 THEN LEFT(Q.Src, CHARINDEX(' ', Q.Src) - 1) ELSE Q.Src END AS NameOnly FROM ( SELECT N' ' AS Src UNION ALL SELECT N'' ) Q
में बदल जाता है:
SELECT Q.Src, LEFT(Q.Src, ISNULL(NULLIF(CHARINDEX(' ', Q.Src), 0) - 1, LEN(Q.Src))) AS NameOnly FROM ( SELECT N' ' AS Src UNION ALL SELECT N'' ) Q
SQL प्रोग्रामिंग का आनंद लें!