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 ( ''
)?
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:
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ề NULL
giá trị khi được sử dụng trong một WHERE
mệnh đề. Như NULL
sẽ đánh giá như UNKNOWN
cho 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ó NULL
hoặ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.
column
có một chỉ mục, thì truy vấn của bạn có thể sẽ không sử dụng nó
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!).
Coalesce sẽ gấp null thành một mặc định:
COALESCE (fieldName, '') <> ''
theo cách cơ bản
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
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
WHERE COALESCE(column, '') <> ''
?