¿Cómo verificar si la cadena no es nula y no está vacía en el servidor SQL?

203

¿Cómo podemos verificar en una WHEREcondición de SQL Server si la columna no es nula y no la cadena vacía ( '')?

usuario993935
fuente

Respuestas:

306

Si solo desea hacer coincidir "" como una cadena vacía

WHERE DATALENGTH(COLUMN) > 0 

Si desea contar cualquier cadena que consista completamente en espacios como vacía

WHERE COLUMN <> '' 

Ambos no devolverán NULLvalores cuando se usen en una WHEREcláusula. Como NULLse evaluará en cuanto UNKNOWNa estos en lugar de TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

INSERT INTO T 
VALUES      ('A'), 
            (''),
            ('    '), 
            (NULL); 

SELECT * 
FROM   T 
WHERE  C <> ''

Devuelve solo la fila individual A. Es decir, las filas con NULLo una cadena vacía o una cadena que consiste completamente en espacios están excluidas por esta consulta.

Violín de SQL

Martin Smith
fuente
66
¿Por qué no WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers
10
Porque si columntiene un índice, entonces su consulta probablemente no lo usará
Lamak
106
WHERE NULLIF(your_column, '') IS NOT NULL

Hoy en día (4.5 años después), para facilitar la lectura de un humano, simplemente usaría

WHERE your_column <> ''

Si bien existe la tentación de hacer explícito el cheque nulo ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

... como lo demuestra @Martin Smith en la respuesta aceptada, en realidad no agrega nada (y personalmente rechazo los valores nulos de SQL por completo hoy en día, ¡así que no se aplicaría a mí de todos modos!).

un día cuando
fuente
15

Coalesce plegará los valores nulos por defecto:

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

en forma básica

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

Una forma fácil de hacer esto es:

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

Si no hay muchas filas o este campo no está indexado, puede usar:

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

Puede usar cualquiera de estos para verificar nulos, espacios en blanco y cadenas vacías.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

Simplemente verifique: donde valor> '' - no es nulo y no está vacío

-- 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
fuente