ISNULL (), NVL (), IFNULL () या COALESCE () के बराबर SQLite


92

मैं अपने कोड में निम्नलिखित की तरह कई जाँच होने से बचना चाहता हूँ:

myObj.someStringField = rdr.IsDBNull(someOrdinal) 
                            ? string.Empty 
                            : rdr.GetString(someOrdinal);

मुझे लगा कि मैं अपनी क्वेरी को कुछ इस तरह से करके नल की देखभाल कर सकता हूं:

SELECT myField1, [isnull](myField1, '') 
FROM myTable1
WHERE myField1 = someCondition

मैं हालांकि SQLite का उपयोग कर रहा हूं और यह isnullफ़ंक्शन को पहचानता नहीं है । मैं भी कुछ बराबर अन्य डेटाबेस में मान्यता प्राप्त लोगों की कोशिश की है ( NVL(), IFNULL()और COALESCE()), लेकिन SQLite उनमें से किसी को पहचान करने के लिए प्रतीत नहीं होता।

क्या किसी के पास कोई सुझाव है या ऐसा करने का एक बेहतर तरीका है। दुर्भाग्य से डेटाबेस में सभी क्षेत्रों के लिए डिफ़ॉल्ट मान नहीं हैं। इसके अलावा, मुझे LEFT JOINकुछ मामलों में कुछ खंडों का उपयोग करने की आवश्यकता है , जहां लौटे हुए कुछ क्षेत्र अशक्त होंगे क्योंकि LEFT JOINतालिका में मिलान रिकॉर्ड मौजूद नहीं होगा।

जवाबों:


130

IFNULL, यहाँ देखें: http://www.sqlite.org/lang_corefunc.html#ifnull

फ़ंक्शन के आसपास कोई कोष्ठक नहीं


बाह यह वर्ग कोष्ठक था। उसके लिए धन्यवाद। मुझे पागल कर रहा था कि दस्तावेज ने कहा कि इसका समर्थन किया गया था (इसमें भी मोटे हैं), लेकिन यह काम नहीं कर रहा था। उन दिनों में से एक ...
जेसन डाउन

1
मुझे इस सवाल का संदर्भ "फ़ंक्शन के आसपास कोई ब्रैकेट नहीं" का एहसास है, लेकिन इस तरह के एक बयान के साथ, यह आपके प्रारंभिक बयान के नीचे एक उदाहरण के लिए मदद करेगा।
पाल्सीम

40

इसे इस्तेमाल करे

ifnull(X,Y)  

जैसे

select ifnull(InfoDetail,'') InfoDetail; -- this will replace null with ''
select ifnull(NULL,'THIS IS NULL');-- More clearly....

ifnull()समारोह में अपनी पहली गैर-शून्य तर्क, या शून्य की एक प्रति है, तो दोनों बहस NULL होते हैं। Ifnull()ठीक 2 तर्क होने चाहिए। ifnull()समारोह के बराबर है coalesce()दो तर्कों।


1
हां, मुझे पता चला कि यह ifnullमैं चाहता था ... मुझे बस उस वर्ग कोष्ठक को छोड़ने की आवश्यकता थी जिसका मैं उपयोग कर रहा था।
जेसन डाउन

@HardikDarji क्योंकि कुछ डाउनवोट खुश व्यवस्थापक ने "यह कोशिश करो" शब्द देखा और आगे नहीं पढ़ा। या, क्योंकि किसी ने गलत तरीके से ifnull () से लेकर कॉल्सस () तक की आपकी गलती मान ली है, क्योंकि यह अन्य db वातावरण में होगा (लेकिन साइक्लाइट में नहीं)। किसी भी मामले में, कौन परवाह करता है। "यह कोशिश करो" जवाब "दस्तावेज़ पढ़ें" से बेहतर हैं। मैं गैर-कोड युक्त उत्तरों को स्किम करूंगा / उन्हें भी नहीं पढ़ूंगा, हर बार। जवाब के लिए धन्यवाद!
Maplemale

25

यदि ISNULL()विधि नहीं है, तो आप इस अभिव्यक्ति का उपयोग कर सकते हैं:

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END

यह उसी तरह काम करता है ISNULL(fieldname, 0)


1
फ़ंक्शन फ़ंक्शन के बारे में पूछे ifnullजाने वाले isnullफ़ंक्शन के SQLite समतुल्य है । अब इसे पढ़ने वाले किसी व्यक्ति के लिए, अपने स्वयं के समाधान का उपयोग करने से पहले कृपया SQLMenace का उत्तर (एक साल से अधिक समय पहले) देखें CASE
स्पाकार्की 21

1
@ Spaaarky21 - आप एक अच्छा बिंदु बनाते हैं। हालांकि, यह उत्तर उन लोगों के लिए उपयोगी है जो केवल इकाई परीक्षण के लिए साइक्लाइट का उपयोग कर रहे हैं, और लाइव कोड के लिए एक अलग RDBMS का उपयोग कर रहे हैं। उस स्थिति में, CASEकथनों की तरह कुछ का उपयोग करने से अधिक समझ में आ सकता है IFNULL
सेठ फूल

2
@ सेठफ़्लॉवर मैं एक अधिक RDBMS- तटस्थ तरीके से अशक्त डिफ़ॉल्ट मानों को लागू करने में मूल्य देख सकता हूं लेकिन यह एक अलग प्रश्न का उत्तर है। :) ओपी बस isnullअन्य प्रणालियों में SQLite के समकक्ष के लिए पूछ रहा है और मैं लोगों को "अपने स्वयं के रोल करने के लिए प्रोत्साहित नहीं करना चाहता।"
स्पाकार्की 21

मैं सिर्फ एक ifnotnull () या ifnonnull () ifnull () के पूरक के लिए कुछ की तलाश कर रहा था, "अंतिम_नाम, first_name" प्रदर्शित करने के लिए चयन खंड के भीतर स्ट्रिंग संयोजन में उपयोग करने के लिए, लेकिन केवल अल्पविराम अगर पहले_नाम गैर-शून्य है इस दृष्टिकोण ने मुझे ऐसा करने दिया।
स्टीव ० ste०४

3

ISNULL () विधि के बजाय WHERE-clause में उपयोग करें IS NULLया करें IS NOT NULL:

SELECT myField1
FROM myTable1
WHERE myField1 IS NOT NULL

कृपया अधिक जानकारी के साथ संपादित करें। कोड-ओनली एंड "ट्राय दिस" जवाबों को हतोत्साहित किया जाता है, क्योंकि उनमें कोई खोज योग्य सामग्री नहीं होती है, और यह नहीं समझाते कि किसी को "कोशिश" क्यों करनी चाहिए।
अबारिसोन

1
जो पूछा गया, वह प्रासंगिक नहीं है। ओपी उन पंक्तियों को फ़िल्टर नहीं करना चाहता जहाँ myField1एक गैर-शून्य मान है, वह परिणाम कॉलम में मान को एक अलग से बदलना चाहता है, यदि पंक्ति मान शून्य है।
डैनियल कामिल कोजार

2

NVL () और ISNULL () उपयोग के बराबर के लिए:

IFNULL(column, altValue)

column : जिस कॉलम का आप मूल्यांकन कर रहे हैं।

altValue : 'कॉलम' शून्य होने पर आप जो मूल्य वापस करना चाहते हैं।

उदाहरण:

SELECT IFNULL(middle_name, 'N/A') FROM person;

* नोट: COALESCE () फ़ंक्शन उसी तरह काम करता है जैसा वह अन्य डेटाबेस के लिए करता है।

सूत्रों का कहना है:


-4

आप ऐसे फ़ंक्शन को आसानी से परिभाषित कर सकते हैं और उसका उपयोग कर सकते हैं:

ifnull <- function(x,y) {
  if(is.na(x)==TRUE) 
    return (y)
  else 
    return (x);
}

या वही छोटा संस्करण:

ifnull <- function(x,y) {if(is.na(x)==TRUE) return (y) else return (x);}

4
यह SQLite नहीं है।
डेनियल कामिल कोजार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.