web-dev-qa-db-fra.com

Dans MySQL, pouvez-vous vérifier si un champ est NULL ou vide en utilisant une seule comparaison?

Si je veux vérifier si un champ est NULL ou vide à l'aide d'une requête MySQL, je sais que je peux faire quelque chose comme ceci:

column = '' OR column IS NULL

Cependant, existe-t-il un moyen de vérifier cela sans faire deux comparaisons distinctes?

20
vertigoelectric

Utilisez COALESCE() pour "normaliser" la valeur (convertir les valeurs NULL en une chaîne vide);

WHERE COALESCE(mycolumn, '') = ''

Lisez la documentation: COALESCE()

Ou l'inverse; convertir des chaînes vides en NULL;

WHERE NULLIF(mycolumn, '') IS NULL

Documentation: NULLIF()

De ces deux, je préférerais COALESCE () car il fait partie du standard ANSI SQL

Vous pouvez l'expérimenter vous-même, faites-le;

SELECT 
    mycolumn                      AS orig_value,
    COALESCE(mycolumn, '')        AS coalesce_value,
    (COALESCE(mycolumn, '') = '') AS compare_result

FROM mytable;

Cela montrera la valeur d'origine, la valeur de "fusion" et le résultat de la comparaison côte à côte pour chaque ligne du tableau

33
thaJeztah
WHERE COALESCE(column, '') = ''
3
Esailija

Une autre méthode sans OERE, essayez ceci ..

Sélectionne les valeurs vide et nulle

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
1
PodTech.io

Essaye ça:

WHERE NOT(column LIKE '_%')

Sans le NOT, la valeur de la colonne doit avoir au moins un caractère et ne peut pas être NULL.

EDIT: MySQL semble toujours avaler la valeur NULL de cette façon. Cela devrait mieux fonctionner:

WHERE IFNULL(column, '') = ''
0
Marcellus