SQL में NULL या खाली स्ट्रिंग का उपयोग कैसे करें


129

मैं जानना चाहूंगा कि WHERESQL सर्वर में एक क्लॉज में एक ही समय में NULL और एक खाली स्ट्रिंग का उपयोग कैसे करें । मुझे ऐसे रिकॉर्ड खोजने की जरूरत है, जिसमें या तो अशक्त मूल्य हैं या एक रिक्त स्ट्रिंग है। धन्यवाद।


5
SQL में OR कीवर्ड है।
रॉबर्ट हार्वे

13
यह प्रश्न कोई शोध प्रयास नहीं दिखाता है। अपना होमवर्क करना महत्वपूर्ण है । हमें बताएं कि आपने क्या पाया और यह आपकी आवश्यकताओं को पूरा क्यों नहीं करता है। यह दर्शाता है कि आपने खुद को मदद करने का प्रयास करने के लिए समय लिया है, यह हमें स्पष्ट उत्तरों को दोहराने से बचाता है, और सबसे अधिक यह आपको अधिक विशिष्ट और प्रासंगिक उत्तर प्राप्त करने में मदद करता है। अक्सर पूछे जाने वाले प्रश्न
कर्मीट

1
MySQL तालिका से डेटा का चयन कैसे करें के संभावित डुप्लिकेट जहां एक कॉलम NULL है (यह एक MySQL प्रश्न था, लेकिन यह मूल रूप से t-sql का एक ही उत्तर है)
माइकल बर्कोव्स्की

जवाबों:




25

यदि आपको इसे सेलेक्ट सेक्शन में जरूरत पड़े तो आप इस तरह का उपयोग कर सकते हैं।

    SELECT  ct.ID, 
            ISNULL(NULLIF(ct.LaunchDate, ''), null) [LaunchDate]
    FROM    [dbo].[CustomerTable] ct

आप nullअपने प्रतिस्थापन मूल्य के साथ बदल सकते हैं ।


1
Oracle का NVL (var1, 'value') खाली स्ट्रिंग की जगह लेगा। टी-एसक्यूएल के इस्नाल (var1, 'value') नहीं है।
जेना लीफ

15
SELECT *
FROM   TableName
WHERE  columnNAme IS NULL OR 
       LTRIM(RTRIM(columnName)) = ''

2
सेलेक्ट करें * टेबलनेम से जहां कॉलमनाले में NULL या RTRIM (कॉलमनाम) = ''
जेवियर जॉन

2
जैसा कि जेवियर बताते हैं, बीओटीएच करने की कोई आवश्यकता नहीं है ltrimऔर rtrimयदि लक्ष्य केवल खाली स्ट्रिंग की तुलना करना है। REASON: यदि केवल व्हॉट्सएप है, तो एक ट्रिम सभी को हटा देगा। उदाहरण के लिए, आपको परवाह नहीं है कि तुलना विफल हो जाती है क्योंकि जो रहता है वह "एबीसी" या "एबीसी" है।
ToolmakerSteve

8

उन पंक्तियों को खोजने के लिए जहां कर्नल है NULL, खाली स्ट्रिंग या व्हाट्सएप (रिक्त स्थान, टैब):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')=''

उन पंक्तियों को खोजने के लिए जहां कर्नल है NOT NULL, खाली स्ट्रिंग या व्हाट्सएप (रिक्त स्थान, टैब):

SELECT *
FROM table
WHERE ISNULL(LTRIM(RTRIM(col)),'')<>''

7

कुछ सारगर्भित तरीके ...

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);

और कुछ गैर-सारगर्भित ...

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';


3

मेरा सबसे अच्छा समाधान:

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

COALESCE अभिव्यक्ति सूची () में पहला गैर-नल विस्तार देता है।

यदि फ़ील्डवैल्यू शून्य या रिक्त स्ट्रिंग है तो: हम दूसरा तत्व वापस करेंगे।

तो 0 0 के बराबर है तो यह फील्डवैल्यू एक शून्य या रिक्त स्ट्रिंग है।

छूट के लिए अजगर में:

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

सौभाग्य


2

you is check null with LULL (RTRIM (LTRIM (Column))) = के साथ NULL और स्ट्रिंग को खाली करें

SELECT *
FROM AppInfra.Person
WHERE   LEN(RTRIM(LTRIM(NationalCode))) = 0 OR  NationalCode IS NULL



1

आप टेक्स्ट फ़ील्ड के isnullदोनों nullऔर खाली मान प्राप्त करने के लिए फ़ंक्शन का उपयोग कर सकते हैं :

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

Isnull फ़ंक्शन शाब्दिक रूप से केवल जाँच करता है कि क्या मान शून्य है। यदि स्ट्रिंग खाली है ("") यह काम नहीं करेगा।
मैक्स प्रिंगल

@ मोम प्रिंगल। मैं अलग तरह से नहीं कहता हूं। साथ ही प्रदान किया गया कोड प्रश्न अनुरोध को संबोधित करता है। आपके योगदान पर यकीन नहीं है। डाउनवोटिंग के बजाय एक संपादन का सुझाव दें।
अल्बर्टो डी कारो

आपकी सलाह लेगा। मैंने अब सुझाए गए संपादन में डाल दिया। यह जहाँ खंड केवल शून्य मान प्राप्त करता है रिक्त स्ट्रिंग मान नहीं। रिक्त मान प्राप्त करने के लिए एक नल का उपयोग किया जा सकता है।
मैक्स प्रिंगल

1
--setup
IF OBJECT_ID('tempdb..#T') IS NOT NULL DROP TABLE #T;
CREATE TABLE #T(ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY, NAME VARCHAR(10))
INSERT INTO #T (Name) VALUES('JOHN'),(''),(NULL);
SELECT * FROM #T
 1  JOHN
 2  -- is empty string
 3  NULL

आप जांच कर सकते हैं ''के रूप में NULLइसे करने के लिए परिवर्तित करने NULLका उपयोग करNULLIF

--here you set '' to null
UPDATE #T SET NAME = NULLIF(NAME,'')
SELECT * FROM #T 
 1  JOHN
 2  NULL
 3  NULL

या आप का उपयोग कर के NULLरूप में जांच कर सकते हैं''SELECT ISNULL(NULL,'')

-- here you set NULL to ''
UPDATE #T SET NAME = ISNULL(NULL,'') WHERE NAME IS NULL
SELECT * FROM #T
1   JOHN
2   -- is empty string
3   -- is empty string

--clean up
DROP TABLE #T


1

इस कार्य द्वारा:

ALTER FUNCTION [dbo].[isnull](@input nvarchar(50),@ret int = 0)
RETURNS int
AS
BEGIN

    return (case when @input='' then @ret when @input is null then @ret else @input end)

END

और इसका उपयोग करें:

dbo.isnull (मूल्य, 0)


1
SELECT * FROM DBO.AGENDA
WHERE 
  --IF @DT_START IS NULL OR EMPTY
  ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) -- GET ALL DATE
  OR --ELSE
  ( DT_START >= @DT_START ) --FILTER

-- MORE FILTER

SELECT * FROM DBO.AGENDA
WHERE 
  ( ( ISNULL( @DT_START,'' ) = '' AND DT_START IS NOT NULL ) OR ( DT_START >= @DT_START ) ) 
  AND
  DT_END < GETDATE()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.