Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में NULLIF () कैसे काम करता है

SQL सर्वर में, NULLIF() अभिव्यक्ति दो निर्दिष्ट अभिव्यक्तियों के मूल्य की जांच करती है। यदि वे बराबर हैं तो यह एक शून्य मान देता है, अन्यथा यह पहली अभिव्यक्ति देता है।

सिंटैक्स

वाक्य रचना इस प्रकार है:

NULLIF ( expression , expression )

उदाहरण

प्रदर्शित करने के लिए यहां एक उदाहरण दिया गया है:

SELECT NULLIF(3, 3);

परिणाम:

NULL

यहां, दोनों भाव समान हैं, और इसलिए परिणाम एक शून्य मान है।

यहाँ क्या होता है जब भाव समान नहीं होते हैं:

SELECT NULLIF(3, 7);

परिणाम:

3

इस बार पहला मान लौटाया गया है।

यहां एक उदाहरण दिया गया है जो दोनों परिणामों को समाहित करता है:

SELECT 
    NULLIF(0, 0) AS a,
    NULLIF(3, 3) AS b,
    NULLIF(3, 0) AS c,
    NULLIF(0, 3) AS d;

परिणाम:

+------+------+-----+-----+
| a    | b    | c   | d   |
|------+------+-----+-----|
| NULL | NULL | 3   | 0   |
+------+------+-----+-----+

एक व्यावहारिक उदाहरण

मान लीजिए हमारे पास निम्न डेटा वाली एक तालिका है:

SELECT 
    ProductName,
    ProductPrice
FROM Products;

परिणाम:

+-------------------------------------+----------------+
| ProductName                         | ProductPrice   |
|-------------------------------------+----------------|
| Left handed screwdriver             | 25.99          |
| Long Weight (blue)                  | 14.75          |
| Long Weight (green)                 | 11.99          |
| Smash 2000 Sledgehammer             | 0.00           |
| Chainsaw (includes 3 spare fingers) | 0.00           |
| Straw Dog Box                       | NULL           |
| Bottomless Coffee Mugs (4 Pack)     | 9.99           |
| Right handed screwdriver            | 25.99          |
+-------------------------------------+----------------+
(8 rows affected)

और मान लीजिए कि हम यह पता लगाना चाहते हैं कि कितने उत्पादों की सकारात्मक कीमत है। दूसरे शब्दों में, हम उन उत्पादों को शामिल नहीं करना चाहते जिनकी कीमत या शून्य या शून्य मान है।

ऐसा करने के लिए, हम NULLIF() . का उपयोग कर सकते हैं COUNT() . के संयोजन में समारोह:

SELECT 
    COUNT(NULLIF(ProductPrice, 0.00)) AS Result
FROM Products;

परिणाम:

+----------+
| Result   |
|----------|
| 5        |
+----------+
Warning: Null value is eliminated by an aggregate or other SET operation.

हमें उम्मीद के मुताबिक 5 मिलते हैं, जो कि ProductPrice में कितनी पंक्तियों का सकारात्मक मान है कॉलम।

यह काम करता है क्योंकि COUNT() फ़ंक्शन केवल गैर-शून्य मानों की गणना करता है। शून्य राशियों को शून्य में परिवर्तित करके, हम अपनी गणना में उन मानों को अनदेखा कर सकते हैं।

यहां यह फिर से NULLIF() के बिना है समारोह।

SELECT COUNT(ProductPrice) AS Result
FROM Products;

परिणाम:

+----------+
| Result   |
|----------|
| 7        |
+----------+
Warning: Null value is eliminated by an aggregate or other SET operation.

इस बार इसमें शून्य राशि शामिल है और हमें 7 मिलता है। यह अभी भी पंक्ति 6 ​​को अनदेखा करता है क्योंकि इसका वास्तव में एक शून्य मान है।

जब पहला तर्क शून्य स्थिरांक हो

फ़ंक्शन अपने पहले तर्क के रूप में अशक्त स्थिरांक को स्वीकार नहीं करता है:

SELECT NULLIF(null, 3);

परिणाम:

Msg 4151, Level 16, State 1, Line 1
The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.

जैसा कि त्रुटि संदेश बताता है, पहले तर्क का प्रकार ज्ञात होना चाहिए। फ़ंक्शन का रिटर्न मान पहली अभिव्यक्ति के डेटा प्रकार का उपयोग करता है, और यह त्रुटि उसे दर्शाती है।

यह त्रुटि काफी दुर्लभ होनी चाहिए। ज्यादातर मामलों में, आप पहले तर्क के रूप में एक कॉलम नाम पास करेंगे, और SQL सर्वर में, कॉलम में एक परिभाषित डेटा प्रकार होता है। ऐसे मामलों में, एक शून्य मान वास्तव में स्वीकार किया जाएगा, इस तथ्य के कारण कि SQL सर्वर कॉलम के डेटा प्रकार को जानता है।

चर के लिए भी यही कहा जा सकता है। यदि आप एक चर पास करते हैं, तो आपको इसके प्रकार की घोषणा करनी होगी, और इसलिए, आपको त्रुटि नहीं मिलेगी।

अवैध तर्क गणना

कोई तर्क पारित किए बिना फ़ंक्शन को कॉल करने से त्रुटि होती है:

SELECT NULLIF();

परिणाम:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ')'.

और बहुत अधिक तर्क पारित करने से भी त्रुटि होती है:

SELECT NULLIF(1, 2, 3);

परिणाम:

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near ','.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं SQL सर्वर में जॉइन के साथ एक अद्यतन विवरण कैसे कर सकता हूं?

  2. SQL सर्वर में सभी अविश्वसनीय विदेशी कुंजी बाधाओं को कैसे वापस करें (T-SQL उदाहरण)

  3. विजुअल स्टूडियो में एसएसआईएस लोड चलाते समय मेरा ओडीबीसी कनेक्शन क्यों विफल हो जाता है लेकिन पैकेज उपयोगिता निष्पादित करें का उपयोग करके एक ही पैकेज चलाते समय नहीं

  4. SQL सर्वर में सम्मिलित करने का प्रयास करते समय "वर्चर मान को परिवर्तित करते समय रूपांतरण विफल" ठीक करें

  5. संस्करण 11 के लिए लोकलडीबी के लिए कनेक्शन स्ट्रिंग क्या है?