Helpex - Trao đổi & giúp đỡ Đăng nhập
150

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 ( '')?

150 hữu ích 0 bình luận 331k xem chia sẻ
236

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

236 hữu ích 2 bình luận chia sẻ
85
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!).

85 hữu ích 0 bình luận chia sẻ
13

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

COALESCE (fieldName, '') <> ''
13 hữu ích 0 bình luận chia sẻ
6

Một cách thân thiện chỉ số để 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,'') <> ''
6 hữu ích 0 bình luận chia sẻ
4

theo cách cơ bản

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
4 hữu ích 0 bình luận chia sẻ
2

Điều kiện này sẽ thực hiện kiểm tra "Không, trống hoặc khoảng trắng", mà không cần thao tác chuỗi không cần thiết của LTRIMRTRIM.

SELECT
            *
    FROM
            [Table]
    WHERE
            COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 
2 hữu ích 0 bình luận chia sẻ
1

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
1 hữu ích 0 bình luận chia sẻ
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
0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ sql sql server , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading