[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.

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

Messagepar Dominique Pautrel » 06 Déc 2008 15:40

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é 195 fois
Dernière édition par Dominique Pautrel le 07 Déc 2008 12:20, édité 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
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 210
Inscrit le : 02 Déc 2008 22:22
Localisation : Laval, Pays de Loire

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

Messagepar squenson » 07 Déc 2008 09:00

Dans la requête, il faut utiliser la fonction :
Code : Tout sélectionner   AgrandirRéduire
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
squenson
PassiOOnné
PassiOOnné
 
Message(s) : 564
Inscrit le : 21 Avr 2007 18:27
Localisation : Lausanne, Suisse

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

Messagepar jeanmimi » 07 Déc 2008 09:56

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é 331 fois
Dernière édition par jeanmimi le 17 Mai 2009 16:09, édité 1 fois.
LibreOffice Version : Version: 6.3.3.2 (x64) (4 novembre 2019)
Java (x64) 1.8.0_xxx, Windows 10, Thunderbird, Firefox
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 15063
Inscrit le : 03 Mars 2006 17:02
Localisation : Venise verte

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

Messagepar Dominique Pautrel » 07 Déc 2008 11:18

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
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 210
Inscrit le : 02 Déc 2008 22:22
Localisation : Laval, Pays de Loire

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

Messagepar squenson » 07 Déc 2008 11:42

Si tu édites ta requêt en mode SQL:
Code : Tout sélectionner   AgrandirRéduire
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
squenson
PassiOOnné
PassiOOnné
 
Message(s) : 564
Inscrit le : 21 Avr 2007 18:27
Localisation : Lausanne, Suisse

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

Messagepar Dominique Pautrel » 07 Déc 2008 12:19

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 édition par Dominique Pautrel le 22 Mars 2009 19:28, édité 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
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 210
Inscrit le : 02 Déc 2008 22:22
Localisation : Laval, Pays de Loire

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

Messagepar Pierre-Yves Samyn » 07 Déc 2008 14:16

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   AgrandirRéduire
coalesce( "artPrenom" || ' ' || "artNom", "artPrenom", "artNom" )



Capture-1.png
Pièces jointes
concat.odb
(3.96 Kio) Téléchargé 279 fois
Pierre-Yves Samyn
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 11276
Inscrit le : 02 Mai 2006 09:42

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

Messagepar Dominique Pautrel » 07 Déc 2008 16:36

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
Avatar de l’utilisateur
Dominique Pautrel
Membre cOOnfirmé
Membre cOOnfirmé
 
Message(s) : 210
Inscrit le : 02 Déc 2008 22:22
Localisation : Laval, Pays de Loire


Retour vers Base de données

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 2 invité(s)