यदि मेरा कॉलम MySQL में कोई कॉलम खाली है या अशक्त है तो मैं कैसे जांचूं?


288

मेरे पास एक तालिका में एक स्तंभ है जिसमें शून्य या रिक्त मान हो सकते हैं। यदि तालिका में मौजूद पंक्तियों में कोई कॉलम खाली है या अशक्त है तो मैं कैसे जांचूं?

(e.g. null or '' or '  ' or '      ' and ...)

1
MySQL कोड: select isnull(mycolumn) from mytable1 यदि mycolumn शून्य है तो रिटर्न करता है।
एरिक लेसचिंस्की

2
लंबाई के बारे में क्या (ट्रिम (mycolumn))> 0?
सिरिल जैक्वार्ट

MSSQL के लिए> कहां से <<> '' या जहां (COLUMN)> 0 या जहां NULLIF (LTRIM (RTRIM (COLUMN))), '') पूरी नहीं है
Dxxx

जवाबों:


445

यह सभी पंक्तियों का चयन करेंगे जहां some_colहै NULLया ''(रिक्त स्ट्रिंग)

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';

7
यदि आप स्थिति को बदलते हैं WHERE some_col IS NULL OR some_col = ' '(स्ट्रिंग में डाला गया एक स्थान) तो यह MySQL और Oracle दोनों पर काम करता है, "onedaywhen" का उत्तर देखें। some_col = ''ओरेकल पर काम नहीं करता है क्योंकि खाली तार का मतलब है कि वहां फुल।
जोहाना

1
@ जोहान लेकिन अगर आप स्विच करते हैं ' ', तो यह SQLite में काम नहीं करेगा। यह केवल समान / प्रत्यक्ष स्ट्रिंग मिलान को संभालता है।
मैग्ने

131

जैसा कि SQL-92 मानक द्वारा परिभाषित किया गया है, जब अलग-अलग चौड़ाई के दो तारों की तुलना करते हैं, तो संकरा मूल्य रिक्त स्थान के साथ सही-गद्देदार होता है ताकि यह व्यापक मान के समान चौड़ाई हो। इसलिए, सभी स्ट्रिंग मान जिसमें पूरी तरह से रिक्त स्थान शामिल हैं (शून्य स्थान सहित) को समान माना जाएगा

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

इसलिए, इस बात पर ध्यान दिए बिना काम करना चाहिए कि कितने रिक्त स्थान some_colमान बनाते हैं :

SELECT * 
  FROM T
 WHERE some_col IS NULL 
       OR some_col = ' ';

या अधिक सफलतापूर्वक:

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

6
गद्देदार स्थानों का उल्लेख करने के लिए धन्यवाद। आप उनका लाभ उठा सकते हैं और स्थिति को बदल सकते हैं WHERE some_col IS NULL OR some_col = ' '(स्ट्रिंग में डाला गया एक स्थान) तो यह MySQL और Oracle दोनों पर काम करता है। some_col = ''ओरेकल पर काम नहीं करता है क्योंकि खाली तार का मतलब वहां NULL है और पूरी स्थिति NULL हो जाती है।
जोहाना

मेरी आवश्यकता MySQL में मेरे लिए खोजने SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' '; और SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;काम करने की थी । आशा है कि यह उपयोगी होगा।
दिनुका दयारथना

वास्तव '' = ' 'में SQLServer में काम करता है, लेकिन SQLite में नहीं, जहां तक ​​मैं बता सकता हूं, इसे अभी परीक्षण करने से।
मैग्ने

66

शर्त लिखने का एक छोटा तरीका:

WHERE some_col > ''

null > ''उत्पादन के बाद से unknown, यह दोनों nullऔर खाली तारों को छानने का प्रभाव है ।


2
क्या इसका उल्टा होने का एक तरीका है, सभी रिकॉर्ड प्राप्त करना जहां यह NULL या खाली स्ट्रिंग है?
जोशुआ पिंटर

14
@ जोशप्रांत:coalesce(some_col, '') = ''
एंडोमर

6
यह कुछ समय के लिए सही हो सकता है, लेकिन MySQL 14.14 में काम नहीं करता है।
गुनार Gunór मैगनससन

महान काम करता है और वास्तव में एकमात्र तरीका है जिससे मैं यह पता लगा सकता हूं कि मारियाबड में शून्य और खाली दोनों क्षेत्रों को कैसे फ़िल्टर किया जाए
नील डेविस

1
मैं इसके विपरीत को खोजने के लिए some_col <> '' का उपयोग करता हूं
Chargnn

18

आप परीक्षण कर सकते हैं कि कोई कॉलम अशक्त है या उपयोग नहीं कर रहा है WHERE col IS NULLया WHERE col IS NOT NULLउदा

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

आपके उदाहरण में आपके पास सफेद स्थान के विभिन्न क्रमांकन हैं। आप सफेद स्थान का उपयोग करके पट्टी TRIMकर सकते हैं और आप COALESCEएक डिफ़ॉल्ट मान का उपयोग कर सकते हैं (COALESCE आपके द्वारा दबाए गए मानों से पहला गैर-शून्य मान लौटाएगा।

जैसे

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = '' 

यह अंतिम क्वेरी उन पंक्तियों को लौटा देगी जहां MyColअशक्त है या व्हॉट्सएप की लंबाई है।

यदि आप इससे बच सकते हैं, तो WHERE क्लॉज में एक कॉलम पर फ़ंक्शन न होना बेहतर है क्योंकि यह एक इंडेक्स का उपयोग करना मुश्किल बनाता है। यदि आप बस यह जांचना चाहते हैं कि कोई स्तंभ रिक्त या रिक्त है, तो आप ऐसा करना बेहतर मान सकते हैं:

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

अधिक जानकारी के लिए TRIM COALESCE और IS NULL देखें ।

इसके अलावा MySQL डॉक्स से अशक्त मानों के साथ कार्य करना


2
आप वास्तविक समाधान को बहुत जटिल तरीके से प्रस्तुत करते हैं। पहले आप उसकी समस्या का एक अपूर्ण समाधान प्रस्तुत करते हैं "जहाँ mycol null है"। फिर आप एक समाधान पेश करते हैं जिसमें दो नेस्टेड फ़ंक्शंस का उपयोग किया जाता है, जहाँ क्लॉज़, जबकि यह कहते हुए भी इसे टाला जाना चाहिए। तभी आप वास्तविक समाधान के लिए पहुँचते हैं। भविष्य में, अपना वास्तविक समाधान पहले प्रस्तुत करें।

अपने दूसरे उदाहरण में संकेत )से पहले गुम=
Rorrim

15

WHERE के बिना एक और तरीका, यह कोशिश करो ..

रिक्त और पूर्ण मान दोनों का चयन करेगा

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

यह रिटर्न 1 है अगर कुछ अशक्त है, तो ऐसा क्यों है?
noobie-php

NULLIF रिक्त मान के लिए फ़ील्डनाम की जाँच करता है और खाली होने पर NULL में परिवर्तित हो जाता है। ISULL पूर्ण 1 (सच्चा) देता है यदि NULLIF ने सफलतापूर्वक एक रिक्त फ़ील्ड को NULL में बदल दिया है या यदि यह पहले से ही NULL था .... एक तालिका में दो रिक्त कार्यों के साथ एक रिक्त और रिक्त फ़ील्ड पर अपने स्वयं के लिए प्रयास करें। nnull (X) , nullif (y)
PodTech.io

9

भी

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename

या

SELECT case when field1 IS NULL or field1 = ''
        then 'empty'
        else field1
   end as field1 from tablename

6

मुझे अपने डेटाबेस में गन्दे खेतों से नफरत है। यदि कॉलम एक रिक्त स्ट्रिंग या अशक्त हो सकता है, तो मैं हर बार चयन करने से पहले इसे ठीक करूंगा, जैसे:

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

यह डेटा को चुस्त-दुरुस्त रखता है, जब तक कि आपको किसी कारणवश NULL और खाली के बीच अंतर करने की आवश्यकता न हो।



5

यह कथन मेरे लिए बहुत साफ और अधिक पठनीय है:

select * from my_table where ISNULL(NULLIF(some_col, ''));

4

null or Emptyअपनी परियोजना में एक कॉलम के लिए मूल्य की जांच करते समय , मैंने देखा कि विभिन्न डेटाबेस में कुछ समर्थन चिंताएं हैं।

हर डेटाबेस समर्थन नहीं करता है TRIM तरीका।

नीचे विभिन्न डेटाबेस द्वारा समर्थित विधियों को समझने के लिए मैट्रिक्स है।

SQL में TRIM फ़ंक्शन एक स्ट्रिंग से निर्दिष्ट उपसर्ग या प्रत्यय को हटाने के लिए उपयोग किया जाता है। हटाया जा रहा सबसे आम पैटर्न सफेद रिक्त स्थान है। इस फ़ंक्शन को अलग-अलग डेटाबेस में अलग-अलग तरीके से कहा जाता है:

  • माई एसक्यूएल: TRIM(), RTRIM(), LTRIM()
  • आकाशवाणी: RTRIM(), LTRIM()
  • एस क्यू एल सर्वर: RTRIM(), LTRIM()

कैसे खाली / अशक्त की जाँच करें: -

नीचे अलग-अलग डेटाबेस के अनुसार दो अलग-अलग तरीके हैं-

इन ट्रिम फ़ंक्शन के लिए सिंटैक्स हैं:

  1. जांच के लिए ट्रिम का उपयोग-

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. जाँच करने के लिए LTRIM और RTRIM का उपयोग-

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

ऊपर दिए गए दोनों तरीके आपके डेटाबेस सपोर्ट के आधार पर समान परिणाम प्रदान करते हैं। यदि यह खाली है तो यह तालिका FirstNameसे वापस UserDetailsआ जाता हैLastName

उम्मीद है कि यह आपकी मदद करेगा :)


3

यदि आप चाहते हैं कि जब ORDER BY कर रहा हो, तो NULL मानों को अंतिम रूप से प्रस्तुत किया जाना चाहिए:

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;

3

आप भी कर सकते हैं

SELECT * FROM table WHERE column_name LIKE ''

विलोम होना

SELECT * FROM table WHERE column_name NOT LIKE ''

जाहिरा तौर पर काम नहीं करता है: select NULL like ''रिटर्न NULL- कम से कम MySQL में।
टाइटस


1

अशक्त के लिए जाँच करें

$column is null
isnull($column)

खाली के लिए जाँच करें

$column != ""

हालाँकि, आपको हमेशा कॉलम के लिए NULL सेट नहीं करना चाहिए,
mysql ऑप्टिमाइज़ेशन केवल एक IS NULL स्तर को संभाल सकता है


3
NULLमूल्यों को कभी स्वीकार नहीं करना चर्चा का एक और संपूर्ण विषय है। मुझे नहीं लगता कि आपके तर्क प्रदान किए बिना उस सिफारिश को करना उचित है।
मयंक

मैंने शामिल किया, धैर्य रखें। प्लस वास्तव में NULL (इस प्रश्न की तरह) का उपयोग करके जीवन को कठिन बना देता है।
अंजुल डेस

5
यह एक भयानक सिफारिश है। उस कॉलम पर NULL सेट करना जिसका मूल्य INSERT के समय ज्ञात नहीं हो सकता है, केवल गैर-मानक "अशक्त" मानों के उपयोग को प्रोत्साहित करने के लिए कार्य करता है जैसे -1और ''
दान बेखर

@ यदि आप सुनिश्चित नहीं हैं कि सम्मिलन के दौरान क्या मूल्य हैं, तो आपको किसी भी
कब्जे के


0

मेरे मामले में, डेटा आयात के दौरान कॉलम में स्थान दर्ज किया गया था और हालांकि यह एक खाली कॉलम की तरह दिख रहा था, इसकी लंबाई 1. इसलिए सबसे पहले मैंने खाली दिखने वाले कॉलम की लंबाई का उपयोग करके जांच की, length(column)इसके आधार पर हम खोज क्वेरी लिख सकते हैं

चयन करें * TABLE WHERE LENGHT (COLUMN) = खाली कॉलम के लिए कॉलम की लंबाई


-1

अगर यह डेटाटाइप स्ट्रिंग और पंक्ति शून्य है, तो इसे आज़माएँ

SELECT * FROM table WHERE column_name IS NULL OR column_name = ''

यदि डेटाटाइप इंट या कॉलम 0 हैं, तो यह कोशिश करें

SELECT * FROM table WHERE column_name > = 0

-2
SELECT column_name FROM table_name WHERE column_name IN (NULL, '')

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