90 votes

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

J'aimerais écrire une instruction SELECT qui utilise un seul test pour renvoyer les colonnes sans valeur (null, empty ou all spaces).

Je pensais que ça allait marcher :

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.

103voto

Justin Cave Points 114578

Sur le plan fonctionnel, vous devriez être en mesure d'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 devriez avoir un index basé sur une fonction sur TRIM(nom_colonne) si c'est une condition sélective.

26voto

GendoIkari Points 5949
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.

UPDATE

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 ''

17voto

MerrickPlainview Points 181

La fonction NULLIF convertit toute valeur de colonne contenant 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

9voto

Vikash Pandey Points 130

Pendant la vérification null or Empty pour une colonne, j'ai remarqué qu'il y a quelques problèmes de support dans différentes bases de données.

Chaque base de données ne supporte pas TRIM méthode.

La matrice ci-dessous permet de comprendre les méthodes utilisées par les différentes bases de données.

La fonction TRIM de SQL est utilisée pour supprimer un préfixe ou un suffixe spécifié d'une chaîne de caractères. Le motif le plus courant à supprimer est l'espace blanc. Cette fonction est appelée différemment dans les différentes bases de données :

  • MySQL : TRIM(), RTRIM(), LTRIM()
  • Oracle : RTRIM(), LTRIM()
  • SQL Server : TRIM(), RTRIM(), LTRIM()

Comment vérifier les espaces vides/nuls/blancs :-

Vous trouverez ci-dessous deux méthodes différentes selon les différentes bases de données.

La syntaxe de ces fonctions de coupe est la suivante :

  1. Utilisation de Trim pour vérifier

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. Utilisation de LTRIM et RTRIM pour vérifier

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

Les deux méthodes ci-dessus donnent le même résultat, il suffit de les utiliser en fonction du support de votre base de données. Il renvoie juste le FirstName de UserDetails s'il a une table vide LastName

J'espère que cela aidera les autres aussi :)

4voto

Chose Points 71

Cette requête de phpMyAdmin renvoie les 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 qui sont nulles/vides/juste des espaces, il suffit de supprimer NOT.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X