Comment pouvons-nous vérifier dans une WHEREcondition SQL Server si la colonne n'est pas nulle et non la chaîne vide ( '')?
Comment pouvons-nous vérifier dans une WHEREcondition 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 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.
columna 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, '') <> ''?