J'ai une colonne dans une table qui peut contenir des valeurs nulles ou vides. Comment 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 une table qui peut contenir des valeurs nulles ou vides. Comment vérifier si une colonne est vide ou nulle dans les lignes présentes dans un tableau?
(e.g. null or '' or ' ' or ' ' and ...)
Réponses:
Cela 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 = '';
WHERE some_col IS NULL OR some_col = ' '
(un espace inséré dans la chaîne), 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.
' '
, cela ne fonctionnera pas dans SQLite. Il ne gère que la correspondance de chaîne identique / directe.
Comme défini par la norme SQL-92, lors de la comparaison de deux chaînes de largeurs différentes, la valeur la plus étroite est remplie à droite avec des espaces pour lui donner la même largeur que la valeur la plus large. Par conséquent, toutes les valeurs de chaîne 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 constituant la 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;
WHERE some_col IS NULL OR some_col = ' '
(un espace inséré dans la chaîne) puis cela fonctionne à la fois sur MySQL et Oracle. some_col = ''
ne fonctionne pas sur Oracle car les chaînes vides signifient NULL et la condition complète devient NULL.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
et de SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
travailler pour moi dans MySQL. J'espère que cela vous sera utile.
'' = ' '
dans SQLServer mais pas dans SQLite, pour autant que je sache, de le tester maintenant.
Une manière plus courte d'écrire la condition:
WHERE some_col > ''
Puisque null > ''
produit unknown
, cela a pour effet de filtrer les null
chaînes vides et les deux .
coalesce(some_col, '') = ''
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 différentes permutations d'espace blanc. Vous pouvez supprimer les espaces blancs en utilisant TRIM
et vous pouvez utiliser COALESCE
par défaut une valeur NULL (COALESCE renverra la première valeur non nulle à partir des valeurs que vous spécifiez.
par exemple
SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '') = ''
Cette dernière requête renverra des lignes où MyCol
est nul ou est n'importe quelle longueur d'espace blanc.
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 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 TRIM COALESCE et IS NULL pour plus d'informations.
Travailler également avec des valeurs nulles à partir des documents MySQL
)
avant le =
signe dans votre deuxième exemple
Une autre méthode sans OERE, essayez ceci ..
Sélectionne les valeurs vide et nulle
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
Soit
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
Je déteste les champs en désordre dans mes bases de données. Si la colonne peut être une chaîne vide ou nulle, je préfère corriger cela avant de faire la sélection à chaque fois, comme ceci:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Cela permet de garder 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.
Lors de la vérification de la null or Empty
valeur d'une colonne de mon projet, j'ai remarqué qu'il existe des problèmes de support dans diverses bases de données.
Chaque base de données ne prend pas en charge TRIM
méthode.
Ci-dessous est la matrice juste pour comprendre les méthodes prises en charge par différentes bases de données.
La fonction TRIM dans SQL est utilisée pour supprimer le préfixe ou le suffixe spécifié d'une chaîne. Le motif le plus courant supprimé est les espaces blancs. Cette fonction est appelée différemment dans différentes bases de données:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
Comment vérifier vide / null: -
Voici deux façons différentes selon les différentes bases de données-
La syntaxe de ces fonctions de trim est la suivante:
Utilisation de Trim pour vérifier
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Utilisation de LTRIM & RTRIM pour vérifier-
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Les deux méthodes ci-dessus fournissent le même résultat, utilisez simplement en fonction de votre prise en charge DataBase. Il retourne juste la table FirstName
from UserDetails
si elle a un videLastName
En espérant que cela vous aidera :)
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Vérifiez null
$column is null
isnull($column)
Vérifier vide
$column != ""
Cependant, vous devez toujours définir NOT NULL pour la colonne, l'
optimisation mysql ne peut gérer qu'un seul niveau IS NULL
NULL
valeurs est un autre sujet de discussion. Je ne pense pas qu'il soit approprié de faire cette recommandation sans fournir votre raisonnement.
-1
et ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
et LTRIM
, mais pas TRIM
?
Dans mon cas, l'espace a été entré dans la colonne lors de l'importation des données et bien qu'il ressemblait à une colonne vide, sa longueur était de 1. Donc, tout d'abord, j'ai vérifié la longueur de la colonne vide en utilisant length(column)
puis en fonction de cela, nous pouvons écrire une requête de recherche
SELECT * FROM TABLE WHERE LENGHT (COLUMN) = longueur de la colonne pour la colonne vide
essayez ceci si le type de données est une chaîne et que la ligne est nulle
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
si le type de données est int ou que la colonne est 0, essayez ceci
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
renvoie 1 si mycolumn est null.