Comment vérifier la chaîne N'est pas nul et n'est pas vide dans le serveur SQL?

203

Comment pouvons-nous vérifier dans une WHEREcondition SQL Server si la colonne n'est pas nulle et non la chaîne vide ( '')?

user993935
la source

Réponses:

306

Si vous souhaitez uniquement faire correspondre "" comme une chaîne vide

WHERE DATALENGTH(COLUMN) > 0 

Si vous souhaitez compter toute chaîne entièrement composée d'espaces comme vide

WHERE COLUMN <> '' 

Ces deux ne renverront pas de NULLvaleurs lorsqu'ils sont utilisés dans une WHEREclause. Comme NULLévaluera quant UNKNOWNà ceux-ci plutôt que TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''

Renvoie uniquement la seule ligne A. C'est-à-dire que les lignes avec NULLou une chaîne vide ou une chaîne composée entièrement d'espaces sont toutes exclues par cette requête.

SQL Fiddle

Martin Smith
la source
6
Pourquoi ne pas WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers,
10
Parce que si columna un index, alors votre requête ne l'utilisera probablement pas
Lamak
106
WHERE NULLIF(your_column, '') IS NOT NULL

De nos jours (4,5 ans plus tard), pour faciliter la lecture à un humain, j'utiliserais

WHERE your_column <> ''

Bien qu'il y ait une tentation de rendre explicite la vérification nulle ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

... comme @Martin Smith le démontre dans la réponse acceptée, cela n'ajoute vraiment rien (et personnellement, j'évite complètement les null SQL, donc cela ne s'appliquerait pas à moi de toute façon!).

un jour
la source
15

Coalesce convertira les valeurs nulles en valeurs par défaut:

COALESCE (fieldName, '') <> ''
Anoop Verma
la source
8

de manière basique

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

Pour ce faire, une méthode conviviale est la suivante:

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

S'il n'y a pas beaucoup de lignes ou si ce champ n'est pas indexé, vous pouvez utiliser:

 where isnull(field,'') <> ''
Luc
la source
2

Vous pouvez utiliser l'un ou l'autre de ces éléments pour vérifier les chaînes nulles, blancs et vides.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

Vérifiez simplement: où valeur> '' - pas nul et non vide

-- 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
la source