Como verificar se não é uma seqüência de caracteres nula e não está vazia no SQL server?

202

Como podemos verificar em uma WHEREcondição do SQL Server se a coluna não é nula e não a string vazia ( '')?

user993935
fonte

Respostas:

305

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.

SQL Fiddle

Martin Smith
fonte
6
Por que não WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers
10
Porque se columntem um índice, então sua consulta provavelmente não o usará.
Lamak
106
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!).

um dia quando
fonte
15

A coalescência dobrará nulos em um padrão:

COALESCE (fieldName, '') <> ''
Anoop Verma
fonte
8

de maneira básica

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Saalim Bhoraniya
fonte
7

Uma maneira amigável de fazer isso é:

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

Se não houver muitas linhas ou esse campo não estiver indexado, você pode usar:

 where isnull(field,'') <> ''
Luc
fonte
2

Você pode usar qualquer um deles para verificar nulos, espaços em branco e cadeias vazias.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
DxTx
fonte
0

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
Ellis
fonte