J'ai une table où certaines lignes ont un cells
vide. J'ai essayé de sélectionner de telles lignes en utilisant la fonction IS NULL. Mais la requête sélectionne 0 ligne.
select * from zzz_fkp_registration_female where fname is null;
(0 row(s) affected)
Maintenant, j'ai changé ma requête en:
select * from zzz_fkp_registration_female where fname is null or fname ='';
J'ai le résultat souhaité.
Pourquoi IS NULL ne donne-t-il pas le résultat? Quelle est la différence entre IS NULL
et ''
puisque les cellules sont vides. S'il vous plaît, expliquez.
Quelques différences entre eux:
NULL
peut être affecté à tout type, par opposition à une chaîne vide qui ne sera pas compatible avec les champs de date/numériques.NULL
est une valeur UNKNOWN, elle n'a pas de valeur par opposition à une chaîne vide, qui est une valeur, mais vide.NULL
ne devrait pas capturer de la mémoire, contrairement à une chaîne vide.null = null
donnera null
au lieu de ''=''
qui donnera TRUE
.Null est une absence de valeur. Une chaîne vide est une valeur, mais est simplement vide.
Null est spécial pour une base de données.
En utilisant NULL, vous pouvez faire la distinction entre "ne pas mettre de données" et "mettre des données vides".
Quelques autres différences:
Une longueur de NULL est NULL, une longueur d'une chaîne vide est 0 . NULL sont triés avant les chaînes vides . COUNT (message) comptera des chaînes vides, mais pas NULLsVous pouvez rechercher un vide chaîne en utilisant une variable liée, mais pas pour un NULL. Cette requête:
SELECT *
FROM mytable
WHERE mytext = ?
ne correspondra jamais à une valeur NULL dans mytext, quelle que soit la valeur transmise par le client. Pour faire correspondre les valeurs NULL, vous devrez utiliser une autre requête
SELECT *
FROM mytable
WHERE mytext IS NULL
Il ne peut pas trouver NULL car il n'a pas de valeur
Une chaîne vide est une valeur, mais elle est vide.
Seulement si c'est une valeur, il peut être comparé avec une autre valeur
Vous pouvez modifier votre requête comme ci-dessous:
select * from zzz_fkp_registration_female where isnull(fname,'') = '';
Cette requête entraînera toutes les cellules vides ainsi que les cellules avec des valeurs NULL.
Remarque: