एक ही परीक्षा के साथ अशक्त / खाली / व्हाट्सएप मूल्यों की जांच कैसे करें?


88

मैं एक सेलेक्ट स्टेटमेंट लिखना चाहूंगा जिसमें बिना किसी मान (शून्य, रिक्त या सभी रिक्त स्थान) वाले कॉलम को वापस करने के लिए सिर्फ एक टेस्ट का उपयोग किया जाए।

मैंने सोचा कि यह काम करेगा:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';

लेकिन यह NULL मानों के लिए काम नहीं करता है।

बेशक मैं जोड़ सकता हूं

OR column_name IS NULL

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



क्या कई परीक्षण करना वांछनीय नहीं है? डेटा को सही करने के तरीके के बारे में उपयोगकर्ताओं के लिए बेहतर प्रतिक्रिया = अधिक बारीकियों =।
onedaywhen

@onedaywhen: सामान्य तौर पर, अधिक ग्रैन्युलैरिटी होना बेहतर हो सकता है, लेकिन मैं एक मौजूदा कोड बेस के साथ काम कर रहा हूं और मैं मौजूदा कोड संरचना की यथासंभव नकल करना चाहता हूं। वर्तमान कोड केवल एक परीक्षण करता है, इसलिए मैं एक ऐसे समाधान की तलाश में था जिसका केवल एक परीक्षण हो।
जॉन गॉर्डन

जवाबों:


101

कार्यात्मक रूप से, आपको उपयोग करने में सक्षम होना चाहिए

SELECT column_name
  FROM table_name
 WHERE TRIM(column_name) IS NULL

समस्या यह है कि COLUMN_NAME पर एक इंडेक्स का उपयोग नहीं किया जाएगा। यदि आप एक चयनात्मक स्थिति है, तो आपको TRIM (column_name) पर फ़ंक्शन-आधारित इंडेक्स की आवश्यकता होगी।


32
टी-SQL उपयोगकर्ताओं के लिए ध्यान दें: कोई TRIM नहीं है, आपको LTRIM या RTRIM की आवश्यकता होगी।
डेन्कोडायमेनिस्क

11
के बाद से एसक्यूएल सर्वर 2017 वहाँ एक TRIM कार्य है। स्त्रोत
bvwidt

1
@ EhMann365 यह सवाल Oracle के बारे में है, Sql सर्वर के बारे में नहीं।
MH

11
RTRIM (LTRIM (column_name)) - माइक्रोसॉफ़्ट SQL उपयोगकर्ताओं के लिए।
DxTx

4
Sql सर्वर TRIM (column_name) में रिक्त स्ट्रिंग '', नहीं है। अन्य उत्तर दोनों खाली स्ट्रिंग और NULL
माइकल फ्रीजिम

25
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''

ISNULL(column_name, '') यदि स्तंभ_नाम NULL है, तो '' लौटाएगा, अन्यथा यह column_name लौटा देगा।

अपडेट करें

ओरेकल में, आप NVLसमान परिणाम प्राप्त करने के लिए उपयोग कर सकते हैं ।

SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''

3
वास्तव में यह अभी भी ओरेकल में काम नहीं करता है, ओरेकल खाली तारों का इलाज करता है, इसलिए आपके पास "नहीं ''" का एक खंड नहीं हो सकता है क्योंकि यह एक शून्य मान के खिलाफ तुलना कर रहा है
हैरिसन

क्या मैं नहीं चाहता '' के बजाय '' पसंद नहीं ''?
जॉन गॉर्डन

हां, क्षमा करें, मूल प्रश्न को गलत मानें, जिसमें मूल्य है। लेकिन जैसा कि tanging ने बताया है, ऐसा नहीं लगता है कि यह Oracle में काम करेगा।
गेंडोइकरी

चूंकि मैं ओरेकल का उपयोग कर रहा हूं, ऐसा लगता है कि मैं WHERE TRIM (col) IS NULL का उपयोग कर सकता हूं और यह अशक्त, रिक्त और व्हाट्सएप मूल्यों का ध्यान रखेगा।
जॉन गॉर्डन

जाहिर है, पहला भाग एक कोष्ठक को याद कर रहा है, यह होना चाहिए:WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
सर्ज सगन

15

NULLIF फ़ंक्शन किसी भी स्तंभ मान को केवल NULL मान में व्हॉट्सएप में बदल देगा। टी-एसक्यूएल और एसक्यूएल सर्वर 2008 और ऊपर के लिए काम करता है।

SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL

1
एक अच्छे उत्तर में कोड की व्याख्या होगी, और इसे इस तरह क्यों लिखा गया। मेरा सुझाव है कि आप अपने उत्तर को अपडेट करें :-)
किर्ल

1
इस बात का क्या मतलब है? यह और अधिक कुशल बस [स्तंभ] की तरह '' के लिए यह निर्धारित करने के लिए किया जाएगा
चुप

इसे कई सफेद रिक्त स्थान का समर्थन करने के लिए TRIM की आवश्यकता है
माइकल फ्रीजिम

1
SQL सर्वर 2017 पर परीक्षण, यह TRIM के बिना कई सफेद रिक्त स्थान के लिए काम करता है। मुझे इससे कोई मतलब नहीं है, क्योंकि प्रलेखन के अनुसार NULLIF को NULL को केवल तभी वापस करना चाहिए जब दो भाव समान हों, और रिक्त स्थान का एक स्ट्रिंग आमतौर पर एक खाली स्ट्रिंग के बराबर नहीं होता है। (मैंने केवल रिक्त स्थान के लिए परीक्षण किया, न कि टैब, न्यूलाइन्स, या अन्य व्हाट्सएप पात्रों के लिए।)
जोवी

1
@Jovie SQL सर्वर कभी-कभी अनुगामी व्हॉट्सएप की अनदेखी करता है, पढ़ें: stackoverflow.com/questions/17876478/…
ब्रायन मैकके

7

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

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

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

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

  • माई एसक्यूएल: TRIM(), RTRIM(), LTRIM()
  • आकाशवाणी: RTRIM(), LTRIM()
  • एस क्यू एल सर्वर: TRIM(), 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

यह उम्मीद करने से दूसरों को भी मदद मिलेगी :)


T t के साथ (select '' c Union all select '' c Union all select NULL) सेलेक्ट * FROM t WHERE LTRIM (RTRIM (c)) IS NULL; SQL सर्वर पर 3 रिकॉर्ड नहीं लौटे
वक़ार

5
एल एंड आरटीआरआईएम दोनों की आवश्यकता क्यों होगी? कॉलम खाली है या नहीं यह जाँचने के लिए केवल एक ही कार्य पर्याप्त नहीं होगा?
चुप

4

यह phpMyAdmin क्वेरी उन पंक्तियों को लौटा रही है, जो शून्य या रिक्त या केवल व्हाट्सएप नहीं हैं:

SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))

यदि आप उन पंक्तियों का चयन करना चाहते हैं जो अशक्त / खाली हैं / सिर्फ व्हाट्सएप सिर्फ हटाएं नहीं।


2

नीचे क्वेरी का उपयोग करें और यह काम करता है

SELECT column_name FROM table_name where isnull(column_name,'') <> ''

0

IsNotNullOrEmptyOrWhiteSpaceटी-एसक्यूएल में मैं क्या उपयोग करता हूं :

SELECT [column_name] FROM [table_name]
WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0

0

हर एक व्यक्ति रिकॉर्ड्स खोजने के लिए ओरेकल में एक क्वेरी चलाने का सुझाव देता है जिसका विशिष्ट क्षेत्र केवल रिक्त है, (यह शामिल नहीं है (रिक्त) या किसी अन्य फ़ील्ड में सिर्फ एक रिक्त पंक्ति) काम नहीं किया। मैंने हर एक सुझाए गए कोड की कोशिश की। लगता है मैं ऑनलाइन खोज करता रहूंगा।

*****अपडेट करें*****

मैंने यह कोशिश की और यह काम किया, यह सुनिश्चित नहीं था कि यह काम नहीं करेगा अगर <1 लेकिन किसी कारण से <2 काम किया और केवल उन रिकॉर्डों को वापस कर दिया जिनका क्षेत्र रिक्त है

[कॉलमनाम] [टेबलनेम] से चुनें, जहां LENGTH (कॉलमनाम) <2;

मैं अनुमान लगा रहा हूं कि डेटा को परिवर्तित करने के लिए जो भी स्क्रिप्ट का उपयोग किया गया था, वह क्षेत्र में कुछ छोड़ गया है, भले ही वह खाली दिखाता हो, मेरा अनुमान है कि क्यों <2 काम करता है लेकिन <1 नहीं

हालाँकि, यदि आपके पास उस कॉलम फ़ील्ड में कोई अन्य मान है जो दो वर्णों से कम है, तो आपको किसी अन्य समाधान के साथ आना पड़ सकता है। यदि बहुत सारे अन्य वर्ण नहीं हैं, तो आप उन्हें एकल कर सकते हैं।

आशा है कि मेरा समाधान किसी और दिन किसी और की मदद करता है।


-3

Oracle के रूप में आप MySQL में NVL फ़ंक्शन का उपयोग कर सकते हैं, आप इस उदाहरण में अपने इच्छित परिणाम प्राप्त करने के लिए IFNULL (columnaName, newValue) का उपयोग कर सकते हैं

SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';

-4

आप उपयोग कर सकते हैं

SELECT [column_name] 
FROM [table_name]
WHERE [column_name] LIKE '% %' 
OR [column_name] IS NULL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.