Je voudrais écrire une instruction SELECT qui n'utilise qu'un seul test pour renvoyer des colonnes sans valeur (null, vide ou tous les espaces).
J'ai pensé que cela fonctionnerait:
SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';
Mais cela ne fonctionne pas pour les valeurs NULL.
Bien sûr, je peux ajouter
OR column_name IS NULL
et cela fonctionnera, mais j'aimerais une méthode qui utilise un seul test.
Réponses:
Fonctionnellement, vous devriez pouvoir utiliser
SELECT column_name FROM table_name WHERE TRIM(column_name) IS NULL
Le problème, c'est qu'un index sur COLUMN_NAME ne serait pas utilisé. Vous devrez avoir un index basé sur la fonction sur TRIM (nom_colonne) s'il s'agit d'une condition sélective.
la source
SELECT column_name from table_name WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
ISNULL(column_name, '')
retournera '' si nom_colonne est NULL, sinon il retournera nom_colonne.MISE À JOUR
Dans Oracle, vous pouvez utiliser
NVL
pour obtenir les mêmes résultats.SELECT column_name from table_name WHERE RTRIM(NVL(column_name, '')) LIKE ''
la source
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
La fonction NULLIF convertira toute valeur de colonne avec uniquement des espaces en une valeur NULL. Fonctionne pour T-SQL et SQL Server 2008 et plus.
SELECT [column_name] FROM [table_name] WHERE NULLIF([column_name], '') IS NULL
la source
Lors de la vérification de la
null or Empty
valeur d'une colonne, j'ai remarqué qu'il y avait des problèmes de support dans diverses bases de données.Chaque base de données ne prend pas en charge
TRIM
méthode.Vous trouverez ci-dessous 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 souvent supprimé est celui des espaces blancs. Cette fonction est appelée différemment dans différentes bases de données:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
TRIM(), RTRIM(), LTRIM()
Comment vérifier les espaces vides / nuls / blancs: -
La syntaxe de ces fonctions de découpage est:
Utilisation de Trim pour vérifier
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Utilisation de LTRIM et 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 support DataBase. Il renvoie simplement la table
FirstName
fromUserDetails
si elle a un videLastName
En espérant que cela aidera les autres aussi :)
la source
Cette requête phpMyAdmin renvoie ces lignes, qui ne sont PAS nulles ou vides ou juste des espaces:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
si vous voulez sélectionner des lignes nulles / vides / juste des espaces, supprimez simplement NOT.
la source
Utilisez la requête ci-dessous et cela fonctionne
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
la source
Ce que j'utilise
IsNotNullOrEmptyOrWhiteSpace
dans T-SQL est:SELECT [column_name] FROM [table_name] WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
la source
Toutes les suggestions de personnes pour exécuter une requête dans Oracle pour trouver des enregistrements dont le champ spécifique est juste vide (cela n'inclut pas (null) ou tout autre champ juste une ligne vide) n'a pas fonctionné. J'ai essayé chaque code suggéré. Je suppose que je vais continuer à chercher en ligne.
*****MISE À JOUR*****
J'ai essayé cela et cela a fonctionné, je ne sais pas pourquoi cela ne fonctionnerait pas si <1 mais pour une raison quelconque <2 fonctionnait et ne renvoyait que les enregistrements dont le champ est juste vide
sélectionnez [nom_colonne] dans [nom_table] où LENGTH (nom_colonne) <2;
Je suppose que le script qui a été utilisé pour convertir les données a laissé quelque chose dans le champ même s'il est vide, je suppose de toute façon pourquoi le <2 fonctionne mais pas <1
Cependant, si vous avez d'autres valeurs dans ce champ de colonne qui contiennent moins de deux caractères, vous devrez peut-être trouver une autre solution. S'il n'y a pas beaucoup d'autres personnages, vous pouvez les distinguer.
J'espère que ma solution aidera quelqu'un d'autre un jour.
la source
Comme dans Oracle, vous pouvez utiliser la fonction NVL dans MySQL, vous pouvez utiliser IFNULL (columnaName, newValue) pour obtenir le résultat souhaité comme dans cet exemple
SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
la source
vous pouvez utiliser
SELECT [column_name] FROM [table_name] WHERE [column_name] LIKE '% %' OR [column_name] IS NULL
la source