SQL सर्वर टेक्स्ट कॉलम खाली होने पर मैं कैसे जांच करूं?


183

मैं SQL Server 2005 का उपयोग कर रहा हूं। मेरे पास एक टेक्स्ट कॉलम के साथ एक तालिका है और मेरे पास तालिका में कई पंक्तियाँ हैं जहां इस स्तंभ का मान शून्य नहीं है, लेकिन यह खाली है। इस प्रतिक्रिया से '' पैदावार की तुलना करने की कोशिश की जा रही है:

ऑपरेटर के बराबर डेटा टाइप टेक्स्ट और वर्चर असंगत हैं।

क्या यह निर्धारित करने के लिए एक विशेष कार्य है कि क्या टेक्स्ट कॉलम का मूल्य शून्य नहीं है, लेकिन खाली है?


1
यदि संभव हो तो मैं डेटा प्रकार को परिवर्तित कर दूंगा (अधिकतम), पाठ को हटा दिया गया है - यदि आप तालिका को छू रहे हैं तो परिवर्तन करना शुरू करने के लिए सबसे अच्छा है। अपने डीबीए के साथ की जाँच करें। लेकिन इससे पहले कि वे बेहतर रूपांतरित हो सकें, इससे अधिक चीजें परिवर्तित हो सकती हैं। यह इस बात पर निर्भर करेगा कि आपके पास कोड जैसी चीजों का कितना उपयोग है और पाठ लिखें जो कि अब ऐसा करने के लिए टूट जाएगा या नहीं, लेकिन मैं इसे लाता हूं, इसलिए आप जानते हैं कि इसे अंततः बदलने की आवश्यकता होगी।
HLGEM

जवाबों:


304
where datalength(mytextfield)=0

2
यह वास्तविक प्रश्न नहीं था, लेकिन लोगों के लिए सिर्फ एक टिप्पणी जो केवल शीर्षक पढ़ती है, OR mytextfield IS NULLजब आपका कॉलम हो सकता है तो जोड़ना न भूलेंNULL
Daan


3
@ प्रतिबंध-जियोइंजीनियरिंग एसक्यूएल सर्वर टी-एसक्यूएल शॉर्ट-सर्किट मूल्यांकन तकनीकों का सम्मान नहीं करता है, इसलिए यहां आदेश परिणाम को प्रभावित नहीं करता है।
कॉनराड

47
ISNULL(
case textcolum1
    WHEN '' THEN NULL
    ELSE textcolum1
END 
,textcolum2) textcolum1

उपरोक्त क्वेरी वास्तव में एक पाठ कॉलम की अशक्तता और शून्यता प्रकृति को संभाल लेगी और तदनुसार शर्त के आधार पर मान प्रदान करेगी। इस उत्तर के लिए अपवोट करें क्योंकि यह वही है जिसकी मुझे तलाश थी। धन्यवाद
user_v

28

दरअसल, आपको सिर्फ LIKE ऑपरेटर का इस्तेमाल करना होगा।

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1 मैं इस उत्तर को यहां दूसरों पर पसंद करता हूं क्योंकि यह SQL फंक्शंस जैसे कि DataLength (), IsNull (), या Cast () को कॉल करने के अतिरिक्त ओवरहेड पर निर्भर नहीं करता है। शायद उत्पन्न क्वेरी योजना समान है (मैंने जांच नहीं की); फिर भी मुझे यह एक दूर का क्लीनर दृष्टिकोण लगता है।
माइकटीवीवी

5

केवल खाली मान प्राप्त करने के लिए (और शून्य मान नहीं):

SELECT * FROM myTable WHERE myColumn = ''

शून्य और रिक्त दोनों मान प्राप्त करने के लिए:

SELECT * FROM myTable WHERE myColumn IS NULL OR myColumn = ''

केवल शून्य मान प्राप्त करने के लिए:

SELECT * FROM myTable WHERE myColumn IS NULL

शून्य और खाली के अलावा अन्य मान प्राप्त करने के लिए:

SELECT * FROM myTable WHERE myColumn <> ''


और याद रखें कि आवश्यक होने पर ही LIKE वाक्यांशों का उपयोग करें क्योंकि वे अन्य प्रकार की खोजों की तुलना में प्रदर्शन को नीचा दिखाएंगे।


क्या आपका मतलब नहीं है myColumn IS NOT NULL AND my column = '';?
bcsb1001

2

IS NULL ऑपरेटर का उपयोग करें:

Select * from tb_Employee where ename is null

1
atoumey इस प्रश्न में कहता है कि "इस स्तंभ का मान शून्य नहीं है, लेकिन यह रिक्त है" इसलिए ISNULL () काम नहीं करेगा :)
GazB

2
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''

1
upvoted, लेकिन ... जहाँ ISNULL (TRIM (फ़ील्ड), '') = '' और भी बेहतर है ;-), अगर आपको लगता है कि अंदर रिक्त स्थान के साथ भी "" एक खाली स्ट्रिंग है
कर्स्टन

MySQL के लिए सही सिंटैक्स है:SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Cláudio Silva

1

मुझे पता है कि यह पोस्ट प्राचीन है लेकिन, मुझे यह उपयोगी लगा।

इसने गैर-रिक्त पाठ फ़ील्ड के साथ रिकॉर्ड वापस करने के मेरे मुद्दे को हल नहीं किया, इसलिए मैंने सोचा कि मैं अपना समाधान जोड़ूंगा।

यह वह जगह है जहां क्लॉज ने मेरे लिए काम किया।

WHERE xyz LIKE CAST('% %' as text)

1

उदाहरण के लिए DATALENGTH विधि का उपयोग करें :

SELECT length = DATALENGTH(myField)
FROM myTABLE


0

अशक्त और एक रिक्त स्ट्रिंग समतुल्य हैं? यदि वे हैं, तो मैं अपने आवेदन में तर्क शामिल करूंगा (या शायद एक ट्रिगर अगर ऐप "आउट-ऑफ-द-बॉक्स" है?) फ़ील्ड को या तो अशक्त या '' होने के लिए मजबूर करने के लिए, लेकिन अन्य नहीं। यदि आप '' के साथ गए थे, तो आप कॉलम को NOT NULL भी सेट कर सकते हैं। बस एक डाटा-स्वच्छता की बात है।


0

मैं एक पूर्वनिर्धारित पाठ ("नो लैब्स अवेलेबल") प्रदर्शित करना चाहता था, यदि मूल्य शून्य या खाली था और मेरे मित्र ने इसके लिए मेरी मदद की:

StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0)
                            THEN cast((S.UnitsOrdered) as varchar(50))
                    ELSE 'No Labs Available'
                    END

वाह, एक उपशम। यह महंगा नहीं है।
Jay Croghan

0

आपको दोनों करना होगा:

SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''


0

मुझे पता है कि इस समस्या के विकल्प के साथ बहुत सारे उत्तर हैं, लेकिन मैं सिर्फ एक साथ जो कुछ भी मिला उसे मैं सबसे अच्छा समाधान के रूप में @Errique Garcia & @Uli Köhler के साथ @Eric Z Beard & @Tim कूपर द्वारा डालना चाहूंगा।

यदि इस तथ्य से निपटने के लिए आवश्यक है कि आपके उपयोग-मामले परिदृश्य में रिक्त स्थान केवल-के समान हो सकता है, क्योंकि नीचे दिया गया क्वेरी 1 होगा, 0 नहीं।

SELECT datalength(' ')

इसलिए, मैं कुछ इस तरह के लिए जाना होगा:

SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))


0

प्रदर्शन का उपयोग isnullकरने के बजाय case, प्रदर्शन के कारण यह बेहतर है।

case when campo is null then '' else campo end

अपने मुद्दे में आपको यह करने की आवश्यकता है:

case when campo is null then '' else
  case when len(campo) = 0 then '' else campo en
end

इस तरह कोड:

create table #tabla(
id int,
campo varchar(10)
)

insert into #tabla
values(1,null)

insert into #tabla
values(2,'')

insert into #tabla
values(3,null)

insert into #tabla
values(4,'dato4')

insert into #tabla
values(5,'dato5')

select id, case when campo is null then 'DATA NULL' else
  case when len(campo) = 0 then 'DATA EMPTY' else campo end
end
from #tabla

drop table #tabla

आप पहले जांच लें कि क्या अशक्त है, तो आप लेन फ़ंक्शन का उपयोग करें ... मुझे आशा है कि यह मदद करता है
एनरिक गार्सिया

यदि कोई पाठ नहीं है, तो स्तंभ पूर्ण और रिक्त नहीं है, तो क्या होगा?
सईद मुहम्मद इदरीस

0
DECLARE @temp as nvarchar(20)

SET @temp = NULL
--SET @temp = ''
--SET @temp = 'Test'

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.