J'ai une colonne dans une table qui pourrait contenir des valeurs nulles ou vides. Comment vérifier si une colonne est vide ou nulle dans les lignes présentes dans une table.
(e.g. null or '' or ' ' or ' ' and ...)
Ceci sélectionnera toutes les lignes où some_col
est NULL
ou ''
(chaîne vide)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
Comme défini par le standard SQL-92, lors de la comparaison de deux chaînes de différentes largeurs, la valeur la plus étroite est complétée à droite avec des espaces pour obtenir la même largeur que la valeur la plus large. Par conséquent, toutes les valeurs de chaîne composées entièrement d'espaces (y compris des espaces nuls) 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 constituant la valeur some_col
:
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
ou plus succinctement:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
Une façon plus courte d'écrire la condition:
WHERE some_col > ''
Puisque null > ''
produit unknown
, ceci a pour effet de filtrer les chaînes null
et les chaînes vides.
Vous pouvez tester si une colonne est nulle ou non vide en utilisant WHERE col IS NULL
ou WHERE col IS NOT NULL
p. Ex.
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
Dans votre exemple, vous avez différentes permutations d'espace blanc. Vous pouvez supprimer les espaces en utilisant TRIM
et vous pouvez utiliser COALESCE
pour utiliser une valeur NULL par défaut (COALESCE renverra la première valeur non NULL à partir des valeurs que vous fournissez.
par exemple.
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Cette dernière requête renverra des lignes où MyCol
est nul ou n’importe quelle longueur d’espace.
Si vous pouvez l'éviter, il vaut mieux ne pas avoir de fonction sur une colonne de la clause WHERE car cela rend difficile l'utilisation d'un index. Si vous voulez simplement vérifier si une colonne est nulle ou vide, vous feriez mieux de faire ceci:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Voir TRIMCOALESCE et IS NULL pour plus d'informations.
Aussi Travailler avec des valeurs NULL à partir de la documentation MySQL
Une autre méthode sans WHERE, essayez ceci ..
Sélectionne les valeurs vide et NULL
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Je déteste les champs en désordre dans mes bases de données. Si la colonne peut être une chaîne vide ou NULL, je corrigerais plutôt ceci avant de sélectionner chaque fois, comme ceci:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Cela garde les données en ordre, tant que vous n'avez pas spécifiquement besoin de faire la différence entre NULL et vide pour une raison quelconque.
essayer
SELECT 0 IS NULL , '' IS NULL , NULL IS NULL
-> 0, 0, 1
ou
SELECT ISNULL(' ') , ISNULL( NULL )
-> 0 ,1
Non plus
SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename
ou
SELECT case when field1 IS NULL or field1 = ''
then 'empty'
else field1
end as field1 from tablename
Si vous voulez que les valeurs NULL soient présentées en dernier lors de l'exécution de ORDER BY, essayez ceci:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
Cette déclaration est beaucoup plus propre et plus lisible pour moi:
select * from my_table where ISNULL(NULLIF(some_col, ''));
Tu peux aussi faire
SELECT * FROM table WHERE column_name LIKE ''
L'inverse étant
SELECT * FROM table WHERE column_name NOT LIKE ''
Vérifier pour null
$column is null
isnull($column)
Vérifier si vide
$column != ""
Cependant, vous devez toujours définir NOT NULL pour la colonne,
L’optimisation de mysql ne peut gérer qu’un seul IS niveau NULL
Dans mon cas, l'espace était entré dans la colonne lors de l'importation des données et bien que cela ressemble à une colonne vide, sa longueur était de 1. Donc tout d'abord, j'ai vérifié la longueur de la colonne vide à l'aide de length(column)
, puis nous pouvons écrire une recherche question
SELECT * FROM TABLE WHERE LENGHT (COLUMN) = longueur de la colonne pour empty colonne
select * from table where length(RTRIM(LTRIM(column_name))) > 0
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';