J'ai une colonne dans un tableau qui peut contenir des valeurs nulles ou vides. Comment puis-je vérifier si une colonne est vide ou nulle dans les lignes présentes dans un tableau ?
(e.g. null or '' or ' ' or ' ' and ...)
J'ai une colonne dans un tableau qui peut contenir des valeurs nulles ou vides. Comment puis-je vérifier si une colonne est vide ou nulle dans les lignes présentes dans un tableau ?
(e.g. null or '' or ' ' or ' ' and ...)
Si vous changez la condition en WHERE some_col IS NULL OR some_col = ' '
(un espace inséré dans la chaîne) alors cela fonctionne à la fois sur MySQL et Oracle, voir la réponse de "onedaywhen". some_col = ''
ne fonctionne pas sur Oracle car les chaînes vides signifient NULL là-bas.
Comme défini par la norme SQL-92, lors de la comparaison de deux chaînes de caractères de largeur différente, la valeur la plus étroite est complétée à droite par des espaces pour qu'elle soit de la même largeur que la valeur la plus large. Par conséquent, toutes les valeurs de chaînes de caractères qui sont entièrement constituées d'espaces (y compris les espaces zéro) seront considérées comme égales, par exemple
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Par conséquent, cela devrait fonctionner quel que soit le nombre d'espaces composant le some_col
valeur :
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
ou plus succinctement :
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
Merci d'avoir mentionné les espaces rembourrés. Vous pouvez en profiter et changer la condition en WHERE some_col IS NULL OR some_col = ' '
(un espace inséré dans la chaîne de caractères), il fonctionne à la fois sur MySQL et Oracle. some_col = ''
ne fonctionne pas sous Oracle car les chaînes vides signifient NULL et la condition complète devient NULL.
Mon exigence était de trouver SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
et SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
a fonctionné pour moi dans MySQL. J'espère que cela vous sera utile.
Existe-t-il un moyen d'obtenir l'inverse, c'est-à-dire d'obtenir tous les enregistrements où il est NULL ou une chaîne vide ?
Vous pouvez tester si une colonne est nulle ou non nulle en utilisant WHERE col IS NULL
ou WHERE col IS NOT NULL
par exemple
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Dans votre exemple, vous avez plusieurs permutations d'espace blanc. Vous pouvez supprimer l'espace blanc en utilisant TRIM
et vous pouvez utiliser COALESCE
pour obtenir une valeur NULL par défaut (COALESCE retournera la première valeur non nulle parmi les valeurs que vous fournissez).
par exemple
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '')) = ''
Cette requête finale retournera les lignes où MyCol
est nulle ou est une longueur quelconque d'espace.
Si vous pouvez l'éviter, il est préférable de ne pas avoir de fonction sur une colonne dans la clause WHERE, car cela rend difficile l'utilisation d'un index. Si vous souhaitez simplement vérifier si une colonne est nulle ou vide, il est préférable de procéder ainsi :
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Voir TRIM COALESCE et EST NUL pour plus d'informations.
Aussi Travailler avec des valeurs nulles Extrait de la documentation MySQL
Vous présentez la vraie solution d'une manière très alambiquée. Vous présentez d'abord une solution incomplète à son problème "where mycol is null". Ensuite, vous présentez une solution utilisant deux fonctions imbriquées dans la clause where, tout en précisant que cela devrait être évité. Ce n'est qu'alors que vous arrivez à la vraie solution. À l'avenir, présentez d'abord votre vraie solution.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Code MySQL :
select isnull(mycolumn) from mytable
renvoie 1 si mycolumn est nulle.2 votes
Que penser de length(trim(mycolumn)) > 0 ?
0 votes
Pour MSSQL > WHERE COLUMN <> '' OR WHERE LEN(COLUMN) > 0 OR WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL