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

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 22:22
Localisation : Laval, Pays de Loire

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

Message 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é.
Pièces jointes
concat.odb
(3.62 Kio) Téléchargé 364 fois
Dernière modification par Dominique Pautrel le 07 déc. 2008 12:20, modifié 2 fois.
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
squenson
PassiOOnné
PassiOOnné
Messages : 564
Inscription : 21 avr. 2007 19:27
Localisation : Lausanne, Suisse

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

Message 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 !
LibreOffice 4.2.3.3. sous Ubuntu 14.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16955
Inscription : 03 mars 2006 17:02
Localisation : Venise verte

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

Message 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
Pièces jointes
Base avec concaténation de champs.odb
(5.55 Kio) Téléchargé 513 fois
Dernière modification par jeanmimi le 17 mai 2009 17:09, modifié 1 fois.
LibreOffice : Version : 24.2.1 (x64)(14 mars 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 22:22
Localisation : Laval, Pays de Loire

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

Message 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 ...
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
squenson
PassiOOnné
PassiOOnné
Messages : 564
Inscription : 21 avr. 2007 19:27
Localisation : Lausanne, Suisse

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

Message 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.
LibreOffice 4.2.3.3. sous Ubuntu 14.04
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 22:22
Localisation : Laval, Pays de Loire

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

Message 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:
Dernière modification par Dominique Pautrel le 22 mars 2009 19:28, modifié 1 fois.
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 11276
Inscription : 02 mai 2006 10:42

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

Message 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
Pièces jointes
concat.odb
(3.96 Kio) Téléchargé 463 fois
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 210
Inscription : 02 déc. 2008 22:22
Localisation : Laval, Pays de Loire

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

Message par Dominique Pautrel »

Effectivement.

Quel outil génial ! :D

Encore merci à tous. :bravo:
OpenOffice.org 3.2 sous Debian Squeeze/Sid et OpenOffice.org 3.2 sous Windows XP SP3.
Le logiciel libre représente selon moi une grande famille où l'union fait la force ...
Battons les escrocs à leur petit jeu
Verrouillé