web-dev-qa-db-fra.com

CONCATER plusieurs champs en un seul champ, à simple interligne

J'essaie de concaténer un champ de nom firstmiddlemaiden et last et de l'utiliser pour mettre à jour un seul champ nommé fullname

Pour chaque utilisateur, n'importe quelle combinaison de ces 4 champs peut être remplie. De 0 à tous les 4. Cependant, j'ai également besoin d'un seul espace entre chaque nom (pas de plusieurs espaces).

UPDATE nameTable SET fullname = CONCAT(first, middle, maiden, last);
22
kylex

MySQL a CONCAT_WS - concaténer avec le séparateur

CONCAT_WS(' ', first, middle, maiden, last);

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws

Comme indiqué par andr ci-dessous, assurez-vous que tous les champs concaténés contiennent NULL et non une chaîne vide ('') Sinon vous obtiendrez un double espace dans la sortie.

Violon: http://sqlfiddle.com/#!2/1fe83/1

Autre application

Soyez donc prudent si à l'avenir vous utilisez cette fonction pour faire une petite liste CSV, car vous n'obtiendrez pas la virgule pour un champ NULL. Vous devriez faire un wrapper COALESCE(column, '') autour de chaque colonne nullable.

37
akatakritos

solution de chaîne vide TRIM(BOTH ' ' FROM CONCAT_WS(' ', first, middle, maiden, last))

http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim

4
jasz24