SQL sunucusunda Boş Değil ve Boş dize değil nasıl denetlenir?


204

Bir SQL Server WHEREkoşulunda, sütunun boş dize ( '') olup olmadığını nasıl kontrol edebiliriz ?

Yanıtlar:


311

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 NULLbir WHEREcümle içinde kullanıldığında değerler döndürmez . As NULLolarak değerlendirecek UNKNOWNBunlar 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 NULLBoş bir dize veya tamamen boşluklardan oluşan bir dize olan satırların tümü bu sorgu tarafından hariç tutulur.

SQL Keman


6
Neden olmasın WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers

10
Çünkü columnbir indeks varsa , sorgunuz muhtemelen kullanmaz
Lamak

107
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!).


15

Coalesce, null değerlerini varsayılan olarak katlar:

COALESCE (fieldName, '') <> ''

9

basit bir şekilde

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL

7

Bunu yapmanın endeks dostu bir yolu:

where (field is not null and field <> '')

Çok fazla satır yoksa veya bu alan dizine eklenmemişse şunları kullanabilirsiniz:

 where isnull(field,'') <> ''

2

Boş, boşluk ve boş dizeleri kontrol etmek için bunlardan birini kullanabilirsiniz.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL

0

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
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.