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 ( '')?

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


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!).


15

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

COALESCE (fieldName, '') <> ''

8

de maneira básica

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL

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,'') <> ''

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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.