Comment vérifier dans une condition SQL Server WHERE
si la colonne n'est pas null et pas la chaîne vide (''
)?
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.
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!).
Coalesce pliera les valeurs nulles dans un défaut:
COALESCE (fieldName, '') <> ''
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,'') <> ''
de manière basique
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
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
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