Как мы можем проверить условие SQL Server WHERE
, является ли столбец не нулевым, а не пустая строка (''
)?
Как проверить, не является ли Null и не пустая строка на SQL-сервере?
Ответ 1
Если вы хотите совместить "" как пустую строку
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
или пустая строка или строка, состоящая полностью из пробелов, исключаются из этого запроса.
Ответ 2
WHERE NULLIF(your_column, '') IS NOT NULL
В настоящее время (4,5 года), чтобы облегчить чтение человеком, я просто использовал бы
WHERE your_column <> ''
Пока есть соблазн сделать явный чек явным...
WHERE your_column <> ''
AND your_column IS NOT NULL
... как @Martin Smith демонстрирует в принятом ответе, он на самом деле ничего не добавляет (и я лично полностью игнорирую SQL-значения в настоящее время, поэтому в любом случае это не будет применяться ко мне).
Ответ 3
Coalesce сбросит значения null в значение по умолчанию:
COALESCE (fieldName, '') <> ''
Ответ 4
Другим способом для этого является:
where (field is not null and field <> '')
Если не так много строк или это поле не индексируется, вы можете использовать:
where isnull(field,'') <> ''
Ответ 5
Это условие выполнит проверку "Нуль, пустое или белое пространство" без ненужных манипуляций с строкой LTRIM
и RTRIM
.
SELECT
*
FROM
[Table]
WHERE
COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0
Ответ 6
основным способом
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Ответ 7
Просто проверьте: где значение > '' - не пустое, а не пустое
-- 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