184 votes

Comment utiliser NULL ou une chaîne vide en SQL ?

J'aimerais savoir comment utiliser NULL et une chaîne vide en même temps dans un fichier WHERE dans SQL Server. J'ai besoin de trouver des enregistrements qui ont soit des valeurs nulles, soit une chaîne vide. Merci.

7voto

Martin Smith Points 174101

Quelques sargable méthodes...

SELECT *
FROM #T
WHERE SomeCol = '' OR SomeCol IS NULL;

SELECT *
FROM #T
WHERE SomeCol = '' 
UNION ALL
SELECT *
FROM #T
WHERE  SomeCol IS NULL;

SELECT *
FROM #T
WHERE EXISTS ((SELECT NULL UNION SELECT '') INTERSECT SELECT SomeCol);

Et d'autres qui ne le sont pas...

SELECT *
FROM #T
WHERE IIF(SomeCol <> '',0,1) = 1;

SELECT *
FROM #T
WHERE NULLIF(SomeCol,'') IS NULL;

SELECT *
FROM #T
WHERE ISNULL(SomeCol,'') = '';

5voto

Ma meilleure solution :

 WHERE  
 COALESCE(char_length(fieldValue), 0) = 0

COALESCE renvoie le premier expr non nul dans l'expression list().

si le fieldValue est null ou une chaîne vide alors : nous retournerons le deuxième élément puis 0.

si 0 est égal à 0, alors ce fieldValue est une chaîne nulle ou vide.

en python par exemple :

def coalesce(fieldValue):
    if fieldValue in (null,''):
        return 0

bonne chance

3voto

ADC Points 2566

Vous pourriez utiliser isnull pour obtenir les deux null et les valeurs vides d'un champ de texte :

SELECT * FROM myTable
WHERE isnull(my_nullable_text_field,'') = ''

3voto

ADM-IT Points 51

C'est du MSSQL moche :

CASE WHEN LTRIM(RTRIM(ISNULL([Address1], ''))) <> '' THEN [Address2] ELSE '' END

2voto

Charaf jra Points 4206
SELECT *
FROM   Table
WHERE  column like '' or column IS NULL OR LEN(column) = 0

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