web-dev-qa-db-fra.com

Comment vérifier si une colonne est vide ou nulle dans mysql

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 ...)
233
priya

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 = '';
357
maček

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;
123
onedaywhen

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.

53
Andomar

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

12
Code Magician

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

Sélectionne les valeurs vide et NULL 

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

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.

5
Keith Johnson

essayer

SELECT 0 IS NULL ,  '' IS NULL , NULL IS NULL

-> 0, 0, 1

ou

SELECT ISNULL('  ') , ISNULL( NULL )
 -> 0 ,1

Référence

4
diEcho

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
4
Reynante Daitol

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;
2
Ghostman

Cette déclaration est beaucoup plus propre et plus lisible pour moi:

select * from my_table where ISNULL(NULLIF(some_col, ''));
2
Amaynut

Tu peux aussi faire 

SELECT * FROM table WHERE column_name LIKE ''

L'inverse étant

SELECT * FROM table WHERE column_name NOT LIKE ''
2
brenjt

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

1
ajreal

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

0
MR AND
select * from table where length(RTRIM(LTRIM(column_name))) > 0
0
Hakan Ilgar
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
0
Baltazar Moreno