web-dev-qa-db-fra.com

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

Comment vérifier dans une condition SQL Server WHERE si la colonne n'est pas null et pas la chaîne vide ('')?

172
user993935

Si vous voulez seulement faire correspondre "" comme chaîne vide

WHERE DATALENGTH(COLUMN) > 0 

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

WHERE COLUMN <> '' 

Ces deux méthodes ne renverront pas les valeurs NULL si elles sont utilisées dans une clause WHERE. Comme NULL sera évalué comme UNKNOWN pour 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 ligne unique A. C'est à dire. Les lignes avec NULL ou une chaîne vide ou une chaîne entièrement composée d'espaces sont toutes exclues par cette requête.

SQL Fiddle

262
Martin Smith
WHERE NULLIF(your_column, '') IS NOT NULL

De nos jours (4,5 ans), pour faciliter la lecture à un humain, je voudrais simplement utiliser

WHERE your_column <> ''

Même s’il est tentant de rendre le contrôle nul explicite ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

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

93
onedaywhen

Coalesce pliera les valeurs nulles dans un défaut:

COALESCE (fieldName, '') <> ''
12
Anoop Verma

Une façon amicale de le faire est de:

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

de manière basique

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

Il suffit de vérifier: où valeur> '' - non 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
0
Ellis

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

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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