मैं कैसे जांचूं कि Sql सर्वर स्ट्रिंग शून्य या खाली है या नहीं


225

मैं डेटा की जांच करना चाहता हूं, लेकिन अगर यह शून्य या खाली है तो इसे अनदेखा करें। वर्तमान में क्वेरी निम्नानुसार है ...

Select              
Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id      

लेकिन मैं company.OfferTexटी प्राप्त करना चाहता हूं अगर listing.Offertextयह एक खाली स्ट्रिंग है, साथ ही साथ यह अशक्त है।

सबसे अच्छा प्रदर्शन समाधान क्या है?

जवाबों:


433

मुझे लगता है यह:

SELECT 
  ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text
FROM ...

सबसे सुरुचिपूर्ण समाधान है।

और छद्म कोड में इसे थोड़ा नीचे तोड़ने के लिए:

// a) NULLIF:
if (listing.Offer_Text == '')
  temp := null;
else
  temp := listing.Offer_Text; // may now be null or non-null, but not ''
// b) ISNULL:
if (temp is null)
  result := true;
else
  result := false;

1
मैं तय नहीं कर सकता था कि मुझे आपके उत्तर या अंकलफॉफ का जवाब देना चाहिए, क्योंकि उसे लगता है कि पहले उत्तर दिया गया था, लेकिन उसका उत्तर आपके द्वारा दिए जाने के बाद संपादित किया गया है। मैंने दोनों को खत्म कर दिया।
ज़ेके

अगर लिस्टिंग .ffer_Text = '', तो यह NULLIF स्थिति से गुजरती है। मैं दुखी हूं।
मैरिट

जब तक company.Offer_Text अशक्त नहीं है, लेकिन तब यह चीजें जटिल हो जाएगी ... =)
Coops

3
क्या हमें यह सुनिश्चित करने के लिए ट्रिम का उपयोग नहीं करना चाहिए कि सब कुछ नियोजित है
irfandar

5
@irfandar - ठीक है, यदि आप सभी रिक्त स्थान के साथ एक स्ट्रिंग का इलाज करना चाहते हैं, तो ट्रिम का उपयोग करें। अन्यथा सभी स्थानों के साथ एक स्ट्रिंग खाली नहीं है।
मार्टिन बा

53
SELECT
   CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText 
        ELSE COALESCE(Company.OfferText, '') END 
   AS Offer_Text,

... 

इस उदाहरण में, यदि listing.OfferTextNULL है, तो LEN () फ़ंक्शन को भी NULL वापस करना चाहिए, लेकिन यह अभी भी> 0 नहीं है।

अपडेट करें

मैंने इसे पोस्ट करने के बाद से 5 1/2 वर्षों में कुछ चीजें सीखी हैं, और अब इसे बहुत अलग तरीके से करता हूं:

COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '')

यह स्वीकार किए गए उत्तर के समान है, लेकिन इसमें एक खामी होने की स्थिति Company.OfferTextभी शून्य है। अन्य वर्तमान उत्तरों में से कोई NULLIF()भी इसका उपयोग नहीं करता है।


यह आज ऊपर उठ गया है, इसलिए यह कहीं न कहीं अनुक्रमित है। मुझे अब मूल उत्तर की तुलना में ऐसा करने का एक बेहतर तरीका पता है।
जोएल कोएहॉर्न

34
Select              
CASE
    WHEN listing.OfferText is null or listing.OfferText = '' THEN company.OfferText
    ELSE COALESCE(Company.OfferText, '')
END As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id

18

यहाँ एक और उपाय है:

SELECT Isnull(Nullif(listing.offertext, ''), company.offertext) AS offer_text, 
FROM   tbl_directorylisting listing 
       INNER JOIN tbl_companymaster company 
         ON listing.company_id = company.company_id

14

आप ISNULLज्ञात आउटपुट के विरुद्ध उत्तर का उपयोग और जांच कर सकते हैं :

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST

12

SQL Server 2012 में आपके पास है IIF, जैसे आप इसका उपयोग कर सकते हैं

SELECT IIF(field IS NULL, 1, 0) AS IsNull

उसी तरह आप देख सकते हैं कि फ़ील्ड खाली है या नहीं।


6

शून्य या रिक्त मानों की जाँच करने के लिए LEN फ़ंक्शन का उपयोग करें। आप सिर्फ LEN (@SomeVarcharParm)> का उपयोग कर सकते हैं। 0. यदि मूल्य NULL, '', या '' है तो यह गलत होगा। इसका कारण यह है कि LEN (NULL) NULL और NULL> 0 वापस लौटाता है। इसके अलावा, LEN ('') रिटर्न 0. अपने आप को चलाने के लिए देखें:

SELECT 
 CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
 CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
 CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
 CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
 CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END

जब आप कहते हैं कि "... LEN (NULL) NULL और NULL> 0 वापस लौटता है ...", सही नियम यह है कि NULL वापसी NULL के साथ हर परीक्षा या तुलना!
दीदी 6868

राइट जो ध्यान देने योग्य है, लेकिन यह एक शॉर्टकट के रूप में काम करता है क्योंकि तुलना सही बूलियन के लिए अशक्त बनाता है इसलिए यह LEN (NULL) = 0 के व्युत्क्रम तुलना के लिए काम नहीं करेगा जब हम अशक्त या खाली के लिए सही लौटना चाहते हैं ।
ज़च जॉनसन

4
Select              
Coalesce(NullIf(listing.OfferText, ''), NullIf(company.OfferText, ''), '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id

प्लस पहले उत्तर के लिए एक (5 साल बाद) दोनों का उपयोग करने के लिए NULLIF()और एक खाली स्ट्रिंग के लिए coalesce अगर company.OfferTextअशक्त है। हालाँकि, NULLIF()यहाँ पर दूसरा कॉल बिना किसी उद्देश्य के काम करता है, जैसे कि आप एक रिक्त स्ट्रिंग को महत्व देते हैं, वैसे भी आप किसी खाली स्ट्रिंग पर वापस जा सकते हैं।
जोएल कोएहॉर्न

4

COALESCE और NULLIF के इस सरल संयोजन को करना चाहिए:

SELECT             
  Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text
...

नोट: यदि आप चाहते हैं कि NULL के बजाय खाली स्ट्रिंग वापस करने के लिए कथन को अंतिम COALESCE तर्क के रूप में एक और खाली स्ट्रिंग जोड़ें, यदि दोनों मान NULL हैं।


4

मुझे पता है कि यह एक पुराना धागा है, लेकिन मैंने ऊपर दिए गए पहले के पदों में से एक को देखा और यह सही नहीं है।

यदि आप यह निर्धारित करने के लिए LEN (...) का उपयोग कर रहे हैं कि क्या क्षेत्र NULL या EMPTY है तो आपको निम्नानुसार इसका उपयोग करने की आवश्यकता है:

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...

3

यहाँ एक समाधान है, लेकिन मुझे नहीं पता कि यह सबसे अच्छा है ...।

Select              
Coalesce(Case When Len(listing.Offer_Text) = 0 Then Null Else listing.Offer_Text End, company.Offer_Text, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id

3
SELECT              
    COALESCE(listing.OfferText, 'company.OfferText') AS Offer_Text,         
FROM 
    tbl_directorylisting listing  
    INNER JOIN tbl_companymaster company ON listing.company_id= company.company_id

3

यह वाक्य रचना:

SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

Microsoft SQL Server 2008 (SP3) में मेरे लिए काम किया


2

SQL परिणाम में रिकॉर्ड Emptyया Nullमान को रोकने के लिए

हम बस जोड़ सकते हैं ..... WHERE Column_name != '' or 'null'


यह कॉल का पहला पोर्ट होगा, लेकिन यदि आप उदाहरण के लिए एक तालिका में कई कॉलमों को समेटने जैसे काम कर रहे हैं, तो यह पंक्ति को उस कॉलम के लिए रिक्त प्रदर्शित करने के बजाय पंक्ति को बाहर कर देगा
Coops


0

[Column_name]> '' नल और खाली तारों को बाहर करता है। एकल उद्धरणों के बीच एक स्थान है।


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