Comment pouvons-nous vérifier dans une WHERE
condition SQL Server si la colonne n'est pas nulle et non la chaîne vide ( ''
)?
Comment pouvons-nous vérifier dans une WHERE
condition SQL Server si la colonne n'est pas nulle et non la chaîne vide ( ''
)?
Réponses:
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 NULL
valeurs lorsqu'ils sont utilisés dans une WHERE
clause. 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 NULL
ou une chaîne vide ou une chaîne composée entièrement d'espaces sont toutes exclues par cette requête.
column
a un index, alors votre requête ne l'utilisera probablement pas
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!).
Coalesce convertira les valeurs nulles en valeurs par défaut:
COALESCE (fieldName, '') <> ''
de manière basique
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
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
WHERE COALESCE(column, '') <> ''
?