Como podemos verificar em uma WHEREcondição do SQL Server se a coluna não é nula e não a string vazia ( '')?
Como podemos verificar em uma WHEREcondição do SQL Server se a coluna não é nula e não a string vazia ( '')?
Respostas:
Se você deseja corresponder "" apenas como uma sequência vazia
WHERE DATALENGTH(COLUMN) > 0
Se você deseja contar qualquer sequência que consiste inteiramente de espaços como vazia
WHERE COLUMN <> ''
Ambos não retornarão NULLvalores quando usados em uma WHEREcláusula. Como NULLirá avaliar quanto UNKNOWNa estes e não TRUE.
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
Retorna apenas uma linha A. NULLOu seja, as linhas com ou uma string vazia ou uma string composta inteiramente por espaços são todas excluídas por esta consulta.
columntem um índice, então sua consulta provavelmente não o usará.
WHERE NULLIF(your_column, '') IS NOT NULL
Hoje em dia (4,5 anos), para facilitar a leitura de um ser humano, eu usaria apenas
WHERE your_column <> ''
Embora exista uma tentação de tornar explícita a verificação nula ...
WHERE your_column <> ''
AND your_column IS NOT NULL
... como @Martin Smith demonstra na resposta aceita, ele realmente não adiciona nada (e eu, pessoalmente, evito os nulos do SQL hoje em dia, para que não se aplique a mim de qualquer maneira!).
A coalescência dobrará nulos em um padrão:
COALESCE (fieldName, '') <> ''
de maneira básica
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Basta verificar: where value> '' - não nulo e não vazio
-- 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, '') <> ''?