J'aimerais écrire une instruction SELECT qui utilise un seul test pour renvoyer des colonnes sans valeur (null, vide ou tous les espaces).
Je pensais 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 je voudrais une méthode qui utilise un seul test.
Fonctionnellement, vous devriez pouvoir utiliser
SELECT column_name
FROM table_name
WHERE TRIM(column_name) IS NULL
Le problème est qu’un index sur COLUMN_NAME ne serait pas utilisé. Vous auriez besoin d'un index basé sur la fonction sur TRIM (nom_colonne) s'il s'agit d'une condition sélective.
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
ISNULL(column_name, '')
retournera '' si nom_colonne est NULL, sinon il renverra nom_colonne.
METTRE À 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 fonction NULLIF convertira toute valeur de colonne comportant uniquement des espaces en une valeur NULL. Fonctionne pour T-SQL et SQL Server 2008 et supérieur.
SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
Utilisez la requête ci-dessous et cela fonctionne
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
Cette requête phpMyAdmin renvoie ces lignes, qui ne sont ni nulles ni vides, ni juste des espaces:
SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))
si vous souhaitez sélectionner des lignes nulles/vides/seulement des espaces, supprimez NOT.
Toute suggestion faite par une personne d'exécuter une requête dans Oracle pour rechercher des enregistrements dont le champ spécifique est simplement vide (cela n'inclut pas (null) ou tout autre champ uniquement une ligne vide) n'a pas fonctionné. J'ai essayé tous les codes suggérés. Je suppose que je vais continuer à chercher en ligne.
*****METTRE À JOUR*****
J'ai essayé cela et cela a fonctionné, ne sachant pas pourquoi cela ne fonctionnerait pas si <1 mais pour une raison quelconque <2 a fonctionné et n'a renvoyé que les enregistrements dont le champ est simplement vide
sélectionnez [Nomcolonne] à partir de [NomTable] où LENGTH (Nomcolonne) <2;
Je suppose que le script utilisé pour convertir les données a laissé quelque chose sur le terrain, même s’il est vide, c’est de toute façon pourquoi le <2 fonctionne mais pas <1
Toutefois, si la valeur de ce champ de colonne contient 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.