Page 1 sur 1

[Résolu] Concaténer même quand un champ est vierge

Publié : 06 déc. 2008 14:40
par Dominique Pautrel
Bonjour,

J'aimerai pouvoir concaténer deux champs avec toujours un résultat, même quand l'un des deux est vierge.

Par exemple, dans une table "Artiste", trois enregistrements :

Prénom Nom
  • 1- Serge Gainsbourg
    2- (Vierge) Bourvil
    3- (Espace) Fernandel
Ci-joint un fichier pour clarifier les choses, le problème est mis en évidence dans la requête ...

Résultat de la requête
  • 1- Pas de problème
    2- C'est vide :-(
    3- Avec un espace cela fonctionne, mais ce n'est ni aligné ni élégant :?
Quelqu'un connait la solution ?
PS : Merci et Bravo à toute la communauté.

Re: Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 08:00
par squenson
Dans la requête, il faut utiliser la fonction :

Code : Tout sélectionner

COALESCE("Prenom", '')
Le deuxième argument est composé de deux apostrophes et non pas d'un guillemet et représente une chaine vide. Cette fonction regarde le premier argument et s'il est NULL, le remplace par le 2eme qui s'il est NULL, sera remplacé par le 3eme, etc. Note qu'une chaine vide n'est pas égale à NULL !

Re: Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 08:56
par jeanmimi
Bonjour,
J'ai l'impression que la requête peut fonctionner sans espace dans le champ vide.

Édit : base avec deux requêtes, pour comparer : une avec la commande CONCAT, une avec la commande COALESCE

Re: Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 10:18
par Dominique Pautrel
Bonjour et merci beaucoup pour vos deux réponses,

Jeanmimi, ta solution fonctionne plus souvent que la mienne, mais dans le cas "normal" du premier (Serge), l'espace a disparu.

Squenson, désolé :oops: je n'arrive pas à me servir de la fonction "COALESCE". Je n'arrive qu'à obtenir "Syntax error in SQL expression". D'autre part, je ne l'ai trouvée ni dans F1, ni sur ce site. Je continue de chercher un peu ...

Re: Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 10:42
par squenson
Si tu édites ta requêt en mode SQL:

Code : Tout sélectionner

SELECT "artID", "artPrenom", "artNom", ltrim(coalesce("artPrenom",'') || ' ' || "artNom") AS "Artiste" FROM "tblArtiste" AS "tblArtiste"
devrait fonctionner correctement.

La documentation hsqldb: http://hsqldb.org/web/hsqlDocsFrame.html, et clique sur SQL syntax dans la colonne de gauche.

Re: Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 11:19
par Dominique Pautrel
Youpi !

Ta solution est excellente et elle fonctionne dans tous les cas de figure !
De plus j'améliore mon français en découvrant le verbe coalescer(d'ou vient probablement le mot coalition)
Quant à la documentation HSQLDB, c'est évidemment une mine d'infos à digérer tranquillement ...

Bien que tout soit contenu dans les précédents posts, je joint à nouveau l'exemple corrigé pour avoir un condensé du problème.

Merci encore à vous deux, je vous souhaite la bonne journée ...

EDIT : Le fichier est supprimé, le bon est juste ci-dessous :wink:

Re: Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 13:16
par Pierre-Yves Samyn
Bonjour
Dominique Pautrel a écrit :Ta solution est excellente et elle fonctionne dans tous les cas de figure !
Mais disons que si tu envisages la saisie d'artistes n'ayant qu'un prénom... il est prudent de compléter :)

Code : Tout sélectionner

coalesce( "artPrenom" || ' ' || "artNom", "artPrenom", "artNom" )
Capture-1.png

Re: [Résolu] Concaténer même quand un champ est vierge

Publié : 07 déc. 2008 15:36
par Dominique Pautrel
Effectivement.

Quel outil génial ! :D

Encore merci à tous. :bravo: