2009-04-28 5 views
67

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

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

मैं समझ मैं तो बस हो सकता था मेरी क्वेरी कुछ इस तरह कर रही द्वारा nulls की देखभाल:

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

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

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

उत्तर

96

IFNULL, यहाँ देखें: समारोह के आसपास http://www.sqlite.org/lang_corefunc.html#ifnull

कोई कोष्ठक

+0

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

18

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

CASE WHEN fieldname IS NULL THEN 0 ELSE fieldname END 

यह वही काम करता है ISNULL(fieldname, 0) के रूप में।

+1

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

+0

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

+1

@ सेथफ्लॉवर मैं अधिक आरडीबीएमएस-तटस्थ तरीके से शून्य डिफ़ॉल्ट मानों को लागू करने में मूल्य देख सकता हूं लेकिन यह एक अलग प्रश्न का उत्तर है। :) ओपी बस अन्य सिस्टमों में एसक्यूलाइट के 'इस्नुल' के बराबर पूछ रहा है और मैं लोगों को "खुद को रोल करने" के लिए प्रोत्साहित नहीं करना चाहता हूं। – spaaarky21

30

इस

ifnull(X,Y) 

, उदा,

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

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

+0

हां, मुझे पता चला कि यह 'ifnull' था जो मैं चाहता था ... मुझे बस स्क्वायर ब्रैकेट्स का उपयोग करने की आवश्यकता थी जिसे मैं उपयोग कर रहा था। –

+1

मेरा उत्तर क्यों दिया जा रहा है? –

+0

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

-2

आप आसानी से इस तरह के समारोह को परिभाषित कर सकते हैं और फिर इसे का उपयोग करें:

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

या एक ही minified संस्करण: IsNull के बजाय() विधि कहां-खंड में

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

यह SQLite नहीं है। –

2

उपयोग IS NULL या IS NOT NULL:

SELECT myField1 
FROM myTable1 
WHERE myField1 IS NOT NULL 
+0

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

+0

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