Làm cách nào để kiểm tra Isnull Null và Is not Empty String trong máy chủ SQL?


202

Làm thế nào chúng ta có thể kiểm tra trong WHEREđiều kiện Máy chủ SQL xem cột không phải là null và không phải là chuỗi rỗng ( '')?

Câu trả lời:


304

Nếu bạn chỉ muốn khớp "" dưới dạng một chuỗi trống

WHERE DATALENGTH(COLUMN) > 0 

Nếu bạn muốn đếm bất kỳ chuỗi nào bao gồm toàn bộ khoảng trắng là trống

WHERE COLUMN <> '' 

Cả hai điều này sẽ không trả về NULLgiá trị khi được sử dụng trong một WHEREmệnh đề. Như NULLsẽ đánh giá như UNKNOWNcho những điều này hơn là TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

INSERT INTO T 
VALUES      ('A'), 
            (''),
            ('    '), 
            (NULL); 

SELECT * 
FROM   T 
WHERE  C <> ''

Trả về chỉ một hàng duy nhất A. Tức là các hàng có NULLhoặc một chuỗi rỗng hoặc một chuỗi chứa toàn bộ khoảng trắng đều bị loại trừ bởi truy vấn này.

Câu đố SQL


6
Tại sao không WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers

10
Bởi vì nếu columncó một chỉ mục, thì truy vấn của bạn có thể sẽ không sử dụng nó
Lamak

106
WHERE NULLIF(your_column, '') IS NOT NULL

Ngày nay (4,5 năm trở đi), để giúp con người dễ đọc hơn, tôi sẽ chỉ sử dụng

WHERE your_column <> ''

Trong khi có một sự cám dỗ để làm cho kiểm tra null rõ ràng ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

... như @Martin Smith chứng minh trong câu trả lời được chấp nhận, nó thực sự không thêm bất cứ điều gì (và cá nhân tôi hoàn toàn tránh xa các null SQL hoàn toàn, vì vậy dù sao nó cũng không áp dụng cho tôi!).


15

Coalesce sẽ gấp null thành một mặc định:

COALESCE (fieldName, '') <> ''


7

Một cách thân thiện để làm điều này là:

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

Nếu không có nhiều hàng hoặc trường này không được lập chỉ mục, bạn có thể sử dụng:

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

2

Bạn có thể sử dụng một trong hai thứ này để kiểm tra null, khoảng trắng và chuỗi rỗng.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

Chỉ cần kiểm tra: nơi giá trị> '' - không null và không trống

-- 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.