61 votes

CONCAT'ing NULL champs

J'ai une table avec trois champs, Prénom, Nom et Email.

Voici quelques données factices:

 FirstName | LastName | Email
Adam        West       adam@west.com
Joe         Schmoe     NULL
 

Maintenant, si je le fais:

 SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS
 

Les éléments vitaux pour Joe sont nuls, car il existe un seul champ nul. Comment surmontez-vous ce comportement? En outre, est-ce le comportement par défaut dans MS SQL Server?

126voto

Stefan Mai Points 9477

Essayer

 ISNULL(FirstName, '<BlankValue>') -- In SQL Server
IFNULL(Firstname, '<BlankValue>') -- In MySQL
 

Alors,

 CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL
 

renverrait la même chose sans le problème null (et une chaîne vide où les null devraient être).

72voto

BILBO Points 349

Regardez CONCAT_WS

Par exemple:

 CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")
 

Les rendements

TEST STRINGTEST STRING 2

C'est plus facile que de construire IFNULL autour de tout. Vous pouvez utiliser une chaîne vide comme séparateur.

12voto

chaladi Points 188

Dans mysql, isnull ne fonctionnera pas quelque temps. essayez IFNULL (),

 CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,''))
 

5voto

Gaby aka G. Petrioli Points 85891

Vous pouvez toujours utiliser le réglage CONCAT_NULL_YIELDS_NULL .

Il suffit de lancer SET CONCAT_NULL_YIELDS_NULL OFF puis toutes les concaténations null donneront lieu à du texte et non à null.

3voto

Brian Points 1335

La réponse de Stefan est correcte. Pour approfondir un peu, vous devez savoir que NULL n'est pas la même chose que Nothing. Null représente l'absence d'une valeur ou, en d'autres termes, non définie. Rien ne représente une chaîne vide qui est en fait une valeur.

Undefined + rien = undefined

Bonne base de données à conserver!

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