258 votes

Comment vérifier si une chaîne Sql Server est nulle ou vide ?

Je veux vérifier les données, mais les ignorer si elles sont nulles ou vides. Actuellement, la requête est la suivante...

Select              
Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id      

Mais je veux obtenir company.OfferTex t si listing.Offertext est une chaîne vide, ainsi que si elle est nulle.

Quelle est la solution la plus performante ?

13voto

lszk Points 697

Dans SQL Server 2012, vous avez IIF Par exemple, vous pouvez l'utiliser comme suit

SELECT IIF(field IS NULL, 1, 0) AS IsNull

De la même manière, vous pouvez vérifier si le champ est vide.

7voto

Zach Johnson Points 51

Utilisez la fonction LEN pour vérifier les valeurs nulles ou vides. Vous pouvez simplement utiliser LEN(@SomeVarcharParm) > 0, qui renverra un résultat faux si la valeur est NULL, '' ou ' '. En effet, LEN(NULL) renvoie NULL et NULL > 0 renvoie false. De même, LEN(' ') renvoie 0. Voyez par vous-même :

SELECT 
 CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
 CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
 CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
 CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
 CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END

0 votes

Lorsque vous dites "... LEN(NULL) renvoie NULL et NULL > 0 renvoie faux...", la vraie règle est que chaque test ou comparaison avec NULL renvoie NULL !

0 votes

C'est vrai que cela vaut la peine d'être noté, mais cela fonctionne comme un raccourci parce que la comparaison fait coïncider le null avec le booléen correct. Cela ne fonctionnerait pas pour la comparaison inverse de LEN(NULL) = 0 lorsque nous voulons renvoyer true pour null ou empty.

5voto

Milan Points 746

Je sais que c'est un vieux fil de discussion mais je viens de voir l'un des messages précédents et il n'est pas correct.

Si vous utilisez LEN(...) pour déterminer si le champ est NULL ou EMPTY vous devez alors l'utiliser comme suit :

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...

4voto

Romain Durand Points 282

Cette syntaxe :

SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

a fonctionné pour moi dans Microsoft SQL Server 2008 (SP3)

4voto

Select              
Coalesce(NullIf(listing.OfferText, ''), NullIf(company.OfferText, ''), '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id

0 votes

Plus un pour la première réponse (5 ans plus tard) à utiliser les deux. NULLIF() et se regroupent en une chaîne vide si company.OfferText est nulle. Cependant, le 2e NULLIF() ici ne sert à rien, car si cette valeur est une chaîne vide, vous allez juste revenir à une chaîne vide de toute façon.

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