Как проверить, является ли строка «Не пусто» и «Не пусто» на сервере SQL? - PullRequest
168 голосов
/ 28 декабря 2011

Как мы можем проверить в условии SQL Server WHERE, является ли столбец не пустым и не пустой ли строкой ('')?

Ответы [ 7 ]

255 голосов
/ 28 декабря 2011

Если вы хотите сопоставить только "" как пустую строку

WHERE DATALENGTH(COLUMN) > 0 

Если вы хотите считать любую строку, состоящую полностью из пробелов, пустой как

WHERE COLUMN <> '' 

Обе они будутне возвращает значения NULL при использовании в предложении WHERE.Поскольку NULL будет оцениваться как UNKNOWN для них, а не TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''

Возвращает только одну строку A.Т.е. строки с NULL или пустой строкой или строкой, состоящей полностью из пробелов, все исключаются из этого запроса.

SQL Fiddle

91 голосов
/ 03 января 2012
WHERE NULLIF(your_column, '') IS NOT NULL

В настоящее время (4,5 года), чтобы человеку было легче читать, я бы просто использовал

WHERE your_column <> ''

Хотя существует соблазн сделать явную проверку нуля ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

... как @Martin Smith демонстрирует в принятом ответе, на самом деле это ничего не добавляет (и я лично в настоящее время полностью избегаю нулевых значений SQL, так что в любом случае это не будет применяться ко мне!).

12 голосов
/ 16 января 2013

Coalesce сворачивает нули в значения по умолчанию:

COALESCE (fieldName, '') <> ''
5 голосов
/ 09 ноября 2015

Индекс дружественный способ сделать это:

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

Если строк не много или это поле не проиндексировано, вы можете использовать:

 where isnull(field,'') <> ''
4 голосов
/ 17 октября 2017

основным способом

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
0 голосов
/ 23 апреля 2018

Вы можете использовать любой из них для проверки пустых, пустых и пустых строк.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
0 голосов
/ 17 октября 2017

Просто проверьте: где значение> '' - не пусто и не пусто

-- 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...