2011-12-28 111 views

Respuesta

164

Si sólo desea hacer coincidir "" como una cadena vacía

WHERE DATALENGTH(COLUMN) > 0 

Si desea contar con cualquier cadena que consiste completamente en espacios tan vacío

WHERE COLUMN <> '' 

Ambos no volverá NULL valores cuando se utiliza en una cláusula WHERE. Como NULL se evaluará como UNKNOWN para 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 A. Es decir. Las filas con NULL o una cadena vacía o una cadena que consiste en su totalidad en espacios están todas excluidas por esta consulta.

SQL Fiddle

+3

¿Por qué no 'WHERE COALESCE (column, '') <> '''? –

+6

Porque si 'column' tiene un índice, entonces su consulta probablemente no lo use – Lamak

67
WHERE NULLIF(your_column, '') IS NOT NULL 

Hoy en día (4,5 años en), para que sea más fácil para un ser humano a leer, me acaba de utilizar

WHERE your_column <> '' 

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

WHERE your_column <> '' 
     AND your_column IS NOT NULL 

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

9

Coalesce se plegará nulos en un defecto:

COALESCE (fieldName, '') <> '' 
2

Esta condición lleva a cabo un "espacio nulo, vacío o blanco" comprobar, sin la manipulación de cadenas innecesaria de LTRIM y RTRIM.

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 
4

una manera respetuosa del índice de hacer esto es:

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

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

where isnull(field,'') <> '' 
0
Sólo

cheque: donde el 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 
3

en modo básico

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