Как мы можем проверить в WHERE
условии SQL Server , является ли столбец не пустым и не пустой ли строкой ( ''
)?
Как мы можем проверить в WHERE
условии SQL Server , является ли столбец не пустым и не пустой ли строкой ( ''
)?
Ответы:
Если вы хотите сопоставить только "" как пустую строку
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
пустой строкой или строкой, состоящей исключительно из пробелов, исключаются из этого запроса.
column
есть индекс, то ваш запрос, вероятно, не будет его использовать
WHERE NULLIF(your_column, '') IS NOT NULL
В настоящее время (4,5 года), чтобы человеку было легче читать, я бы просто использовал
WHERE your_column <> ''
Хотя есть соблазн сделать проверку нуля явной ...
WHERE your_column <> ''
AND your_column IS NOT NULL
... как демонстрирует @Martin Smith в принятом ответе, он ничего не добавляет (и я лично в настоящее время полностью избегаю нулевых значений SQL, так что в любом случае это не будет применяться ко мне!).
Coalesce свернет нули в значение по умолчанию:
COALESCE (fieldName, '') <> ''
в основном
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Просто проверьте: где значение> '' - не пусто и не пусто
-- 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, '') <> ''
?