Bir SQL Server metin sütununun boş olup olmadığını nasıl kontrol ederim?


183

SQL Server 2005 kullanıyorum. Metin sütunu olan bir tablo var ve bu sütunun değerinin boş olmadığı tabloda birçok satır var, ancak boş. '' İle karşılaştırmaya çalışmak şu yanıtı verir:

Metin ve varchar veri türleri, operatöre eşit değilken uyumsuz.

Metin sütununun değerinin boş değil boş mu olduğunu belirleyen özel bir işlev var mı?


1
Mümkünse veri türünü varchar'a (max) dönüştürürüm, metin kullanımdan kaldırılmıştır - tabloya dokunursanız değişiklikleri şimdi yapmaya başlamak en iyisidir. Tabii ki dba ile kontrol edin. Ama dönüştürülmeden önce ne kadar çok şey dönüştürülebilirse o kadar iyi olur. Bu, şimdi yapmak ya da şimdi yapmak için kırık olacak metin içerir ve yazmak gibi şeyler kullanarak ne kadar kod bağlıdır, ama ben getirmek, bu yüzden sonunda değiştirilmesi gerektiğini biliyoruz.
HLGEM

Yanıtlar:


304
where datalength(mytextfield)=0

2
Bu asıl soru değildi, sadece başlığı okuyan insanlar için bir açıklama OR mytextfield IS NULL, sütununuzun ne zaman olabileceğini eklemeyi unutmayınNULL
Daan

2
mytextfield IS NULL *OR*:-)
ban-geoengineering

3
@ ban-geoengineering SQL Server T-SQL kısa devre değerlendirme tekniklerini yerine getirmez, bu nedenle buradaki sipariş sonucu etkilemez.
Conrad

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

Yukarıdaki sorgu aslında bir metin sütununun boşluğu ve boşluk doğasını işleyecek ve buna göre koşula bağlı olarak değer atayacaktır. Aradığım şey bu yana cevap için oy verin. Teşekkürler
user_v

28

Aslında, LIKE operatörünü kullanmanız yeterlidir.

SELECT * FROM mytable WHERE mytextfield LIKE ''

+1 DataLength (), IsNull () veya Cast () gibi SQL İşlevlerini çağırmanın ek yüküne bağlı olmadığı için bu yanıtı diğerlerine tercih ederim. Belki oluşturulan sorgu planı aynıdır (kontrol etmedim); yine de bunu daha temiz bir yaklaşım olarak görüyorum .
MikeTeeVee

5

Yalnızca boş değerler elde etmek için (boş değerler değil):

SELECT * FROM myTable WHERE myColumn = ''

Hem boş hem de boş değerler elde etmek için:

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

Yalnızca boş değerleri almak için:

SELECT * FROM myTable WHERE myColumn IS NULL

Boş ve boş dışındaki değerleri almak için:

SELECT * FROM myTable WHERE myColumn <> ''


LIKE kelime öbeklerini yalnızca gerektiğinde kullanmayı unutmayın, çünkü diğer arama türlerine kıyasla performansı düşürürler.


Bunu mu demek istediniz myColumn IS NOT NULL AND my column = '';?
bcsb1001

2

IS NULL işlecini kullanın:

Select * from tb_Employee where ename is null

1
atoumey, "bu sütunun değerinin boş olmadığını, ancak boş olduğunu" sorusunda olduğunu belirtir, bu nedenle ISNULL () işe yaramaz :)
GazB

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

1
oy verildi, ancak ... burada ISNULL (TRIM (Field), '') = '' daha da iyi ;-), eğer "" içindeki boşluklarla bile Boş bir dize olduğunu düşünüyorsanız
Kirsten

MySQL için doğru sözdizimi:SQL SELECT * FROM TABLE WHERE IFNULL(FIELD, '')=''
Cláudio Silva

1

Bu yazının eski olduğunu biliyorum, ama yararlı buldum.

Boş olmayan bir metin alanı ile kayıt döndürme sorunumu çözmedi, bu yüzden çözümümü ekleyeceğimi düşündüm.

Bu benim için işe yarayan madde.

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



0

Boş ve boş bir dize eşdeğer mi? Eğer öyleyse, alanı boş veya '', ancak diğeri olmaya zorlamak için uygulamama mantık ekleyebilirim (veya uygulama "kutudan çıkarsa" tetikleyici olabilir mi?). '' İle gittiyseniz, sütunu da NULL DEĞİL olarak ayarlayabilirsiniz. Sadece bir veri temizleme meselesi.


0

Değer null veya boşsa ve arkadaşım bana bu konuda yardımcı olsaydı görüntülenmesi için önceden tanımlanmış bir metin ("Labs kullanılabilir") olmasını istedim:

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

Vay, bir alt sorgu. Bu hiç de pahalı değil.
Jay Croghan

0

Her ikisini de yapmanız gerekir:

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


0

Ben bu sorunun alternatifleri ile bol cevaplar olduğunu biliyorum, ama @Eric Z Beard & @Tim Cooper tarafından @Enrique Garcia & @Uli Köhler ile en iyi çözüm olarak bulduğum bir araya getirmek istiyorum.

Aşağıdaki durum sorgulama senaryosunuzda yalnızca alanın boş ile aynı olabileceği gerçeğiyle ilgilenmek için gerekirse, aşağıdaki sorgu 0 değil 1 döndürecektir.

SELECT datalength(' ')

Bu nedenle, şöyle bir şey için giderdim:

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


0

A isnullkullanmak yerine, caseperformans nedeniyle durum daha iyi.

case when campo is null then '' else campo end

Sorununuzda bunu yapmanız gerekir:

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

Bunun gibi kod:

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

önce boş olup olmadığını kontrol edin, sonra len fonksiyonunu kullanın ... umarım yardımcı olur
Enrique Garcia

Sütun NULL ve Boş değilse, hiç Metin içermiyorsa ne olur?
Sayed Muhammad Idrees

0
DECLARE @temp as nvarchar(20)

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

SELECT IIF(ISNULL(@temp,'')='','[Empty]',@temp)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.