web-dev-qa-db-fra.com

Comment vérifier les valeurs nulles/vides/espaces avec un seul test?

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.

64
John Gordon

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.

73
Justin Cave
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 ''
14
GendoIkari

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
4
MerrickPlainview

Utilisez la requête ci-dessous et cela fonctionne

SELECT column_name FROM table_name where isnull(column_name,'') <> ''
1
dvenkateshreddy

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.

0
Chose

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.

0
CatWoman