2011-12-28 28 views

Trả lời

164

Nếu bạn chỉ muốn để phù hợp với "" như là một chuỗi rỗng

WHERE DATALENGTH(COLUMN) > 0 

Nếu bạn muốn đếm bất kỳ chuỗi bao gồm toàn bộ các không gian như trống

WHERE COLUMN <> '' 

Cả hai sẽ không trở lại NULL các giá trị khi được sử dụng trong mệnh đề WHERE. Như NULL sẽ đánh giá là UNKNOWN cho những thay vì 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 A. I E. 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ộ dấu cách đều bị loại trừ bởi truy vấn này.

SQL Fiddle

+3

Tại sao không 'WHAL COALESCE (column,' ') <>' ''? –

+6

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

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

Ngày nay (4,5 năm trên), để làm cho nó dễ dàng hơn cho một người đọc, tôi sẽ chỉ cần sử dụng

WHERE your_column <> '' 

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

WHERE your_column <> '' 
     AND your_column IS NOT NULL 

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

9

liên hiệp sẽ gấp null vào một mặc định:

COALESCE (fieldName, '') <> '' 
2

Tình trạng này sẽ thực hiện một "không gian Null, trống hoặc trắng" kiểm tra, nếu không có sự thao tác chuỗi không cần thiết của LTRIMRTRIM.

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 
4

Một chỉ số 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 lĩnh vực này không được lập chỉ mục, bạn có thể sử dụng:

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

Just kiểm tra: nơi giá trị> '' - không phải rỗng và không trống rỗ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 
3

theo cách cơ bản

SELECT * 
FROM [TableName] 
WHERE column_name!='' AND column_name IS NOT NULL 
Các vấn đề liên quan