Bir SQL Server WHERE
koşulunda, sütunun boş dize ( ''
) olup olmadığını nasıl kontrol edebiliriz ?
Bir SQL Server WHERE
koşulunda, sütunun boş dize ( ''
) olup olmadığını nasıl kontrol edebiliriz ?
Yanıtlar:
Yalnızca "" ile boş bir dize eşleştirmek istiyorsanız
WHERE DATALENGTH(COLUMN) > 0
Tamamen boşluklardan oluşan herhangi bir dizeyi boş olarak saymak istiyorsanız
WHERE COLUMN <> ''
Bunların her ikisi de NULL
bir WHERE
cümle içinde kullanıldığında değerler döndürmez . As NULL
olarak değerlendirecek UNKNOWN
Bunlar için yerine TRUE
.
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
Yalnızca tek satırı döndürür A
. Yani NULL
Boş bir dize veya tamamen boşluklardan oluşan bir dize olan satırların tümü bu sorgu tarafından hariç tutulur.
column
bir indeks varsa , sorgunuz muhtemelen kullanmaz
WHERE NULLIF(your_column, '') IS NOT NULL
Günümüzde (4,5 yıl sonra), bir insanın okumasını kolaylaştırmak için,
WHERE your_column <> ''
Sıfır kontrolünü açık yapmak için bir cazibe olsa da ...
WHERE your_column <> ''
AND your_column IS NOT NULL
@Martin Smith'in kabul edilen cevapta gösterdiği gibi, gerçekten hiçbir şey eklemiyor (ve kişisel olarak SQL null'ları bugünlerde tamamen saklıyorum, bu yüzden yine de bana uygulanmaz!).
Coalesce, null değerlerini varsayılan olarak katlar:
COALESCE (fieldName, '') <> ''
basit bir şekilde
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Sadece şunu kontrol edin: değer> '' - boş değil ve boş değil
-- COLUMN CONTAINS A VALUE (ie string not null and not empty) :
-- (note: "<>" gives a different result than ">")
select iif(null > '', 'true', 'false'); -- false (null)
select iif('' > '', 'true', 'false'); -- false (empty string)
select iif(' ' > '', 'true', 'false'); -- false (space)
select iif(' ' > '', 'true', 'false'); -- false (tab)
select iif('
' > '', 'true', 'false'); -- false (newline)
select iif('xxx' > '', 'true', 'false'); -- true
--
--
-- NOTE - test that tab and newline is processed as expected:
select 'x x' -- tab
select 'x
x' -- newline
WHERE COALESCE(column, '') <> ''
?