Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 14h46   #1
Invité de passage
 
scrutin scrtin
Inscription : août 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : scrutin scrtin

Informations forums :
Inscription : août 2010
Messages : 24
Points : 2
Points : 2
Par défaut Concaténation de champs de type string et integer ou long

Bonjour la communauté
Je voudrais faire une requête en concaténant des champs de type string et des champs de type integer ou long. J'utilise DB2 comme SGBD
J'ai codeEmp de type string , numero de type integer et codService de type string
la requete
Code :
SELECT (codeEmp|| ' '||numero|| ' '||codService ) AS identifiant FROM employe
en faisant cette requête j'ai comme erreur
Code :
Error: SQL problems:DB2 SQL error: SQLCODE: -440, SQLSLATE: 42884, SQLERRMC: ||; FUNCTION
J'ai modifié la requete par:
Code :
SELECT (codeEmp|| ' '||char(numero)|| ' '||codService ) AS identifiant FROM employe
Maintenant j'ai remarqué que la partie numero complète par des espaces blancs si toute la longueur du champs n'est pas renseigné.

Comment éliminer ses espaces blancs ou bien avez vous une autre méthode
Merci
scrutin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 15h05   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Bonjour,

selon votre version de db2 ceci peut ne pas marcher, en fait il faudrait caster votre integer en varchar :

Code :
1
2
3
 
SELECT CAST(mon_integer AS VARCHAR)
FROM ma_table
Je crosi qu'il y a aussi une fonction du type "VARCHAR(mon_integer)" qui existe.


Si l'une ou l'autre de ces deux solutions ne fonctionnent pas il vous restera TRIM :
Code :
1
2
3
 
SELECT trim(char(mon_integer))
FROM ma-TABLE
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 16h32   #3
Invité de passage
 
scrutin scrtin
Inscription : août 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : scrutin scrtin

Informations forums :
Inscription : août 2010
Messages : 24
Points : 2
Points : 2
Bonjour merci de votre réponse mais aucun des 3 solutions ne marchent
scrutin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 12h26   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Dans ce cas expliquez, avec un exemple, ce que veut dire cette phrase :
Citation:
Maintenant j'ai remarqué que la partie numero complète par des espaces blancs si toute la longueur du champs n'est pas renseigné.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/11/2011, 17h02   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Dans le premier message de scrutin, le message d'erreur n'apparaît pas en entier.
Ne serait-ce pas un problème d'opérateur || qui ne serait peut-être pas reconnu par DB2 ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/11/2011, 23h54   #6
Invité de passage
 
scrutin scrtin
Inscription : août 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : scrutin scrtin

Informations forums :
Inscription : août 2010
Messages : 24
Points : 2
Points : 2
si nous voulons creer la table avec codeEmp varchar(20), numero int(5) codService(10).
si nous avons comme données cdeEmp='ING' numero=23 codeService='INF'
avec la requete :
Code :
SELECT (codeEmp|| ' '||char(numero)|| ' '||codService ) AS identifiant FROM employe
nus avons comme resulat identifiant=ING23 INF

je veux éliminer ces espaces blanc pour avoir 'ING23INF'
merci
scrutin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 00h01   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Ben retire les de ta requête !
Code :
SELECT (codeEmp || char(numero) || codService ) AS identifiant FROM employe
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 14h10   #8
Invité de passage
 
scrutin scrtin
Inscription : août 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : scrutin scrtin

Informations forums :
Inscription : août 2010
Messages : 24
Points : 2
Points : 2
Bonjour, je n'ai pas compris ce que je dois éliminer. Si ce sont les espaces que vous faites allusion je voudrais savoir comment faire
scrutin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 14h21   #9
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Compare les deux requêtes...

La tienne :
Code :
SELECT (codeEmp|| ' '||char(numero)|| ' '||codService ) AS identifiant FROM employe
La mienne :
Code :
SELECT (codeEmp || char(numero) || codService ) AS identifiant FROM employe
Tu ne vois pas la différence ?
Tu concatènes codeEmpl puis un espace puis char(numero) puis un espace puis codService.
Je concatène seulement les trois colonnes sans espaces.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 16h07   #10
Invité de passage
 
scrutin scrtin
Inscription : août 2010
Messages : 24
Détails du profil
Informations personnelles :
Nom : scrutin scrtin

Informations forums :
Inscription : août 2010
Messages : 24
Points : 2
Points : 2
Ha oui je vous comprend. En réalité entre (codeEmp et numero) et (numero et codService) il doit y avoir un seul espace blanc et non plusieurs d'ou les (|| ' '|). La n'est pas mon problème.
Le champ nombre a été créé sur une longueur de 5 caractères.
Sur le résultat quelque soit la longueur de la valeur du champ nombre tous les 5 caractères alloué au nombre est utilisé en complétant par des espace blancs si la longueur de la valeur es inférieur a 5.

en exemple si "_" est considéré comme un espace blanc
nous aurons comme résultat
ING_23____INF
alors qu'en réalité nous devons avoir ING_23_INF
J'espère que cette fois ci vous avez compris
Merci
scrutin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 16h22   #11
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
Mais avez-vous testez ce que je vous ai proposé vu que cette solution marche ?

En SQL j'entend bien, si après vous avez un programme qui génère la sortie le problème viendra peut-être de là ... (DDS en l'occurance)
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 17h42   #12
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Code :
SELECT (codeEmp|| ' '||rtrim(char(numero))|| ' '||codService ) AS identifiant FROM employe
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 17h49   #13
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Si la fonction char existe, je mets ma main à couper que la fonction varchar existe aussi.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h25   #14
Membre Expert
 
Homme Sylvain Devidal
Chef de projets Générix
Inscription : février 2010
Messages : 1 062
Détails du profil
Informations personnelles :
Nom : Homme Sylvain Devidal
Âge : 33
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projets Générix
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2010
Messages : 1 062
Points : 1 515
Points : 1 515
Bah sous Oracle, to_char() existe, et pas to_varchar() donc moi je serait un peu moins sûr de moi, j'y tiens à mes mains

Bon, ceci dit, sous Oracle, to_char() génère un varchar2
StringBuilder est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h27   #15
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 641
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 641
Points : 2 634
Points : 2 634
C'est du DB2, les fonctions existent si sa version est assez élevé.

Dans tous les cas le trim(char(mon_integer)) fonctionnent depuis des lustres.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2011, 09h40   #16
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 686
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 686
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
J'ai été malhonnête j'avais vérifié au préalable, cela dit ne travaillant pas avec DB2 je crois savoir qu'il existe plusieurs versions pas forcément équivalentes entre elles, donc peut-être que cette fonction n'existe pas sur toutes les versions :
http://publib.boulder.ibm.com/infoce...n/r0000869.htm
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h33.


 
 
 
 
Partenaires

Hébergement Web