IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Concaténation de champs de type string et integer ou long


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    août 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 62
    Points : 36
    Points
    36
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    select (codeEmp|| ' '||numero|| ' '||codService ) as identifiant from employe
    en faisant cette requête j'ai comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error: SQL problems:DB2 SQL error: SQLCODE: -440, SQLSLATE: 42884, SQLERRMC: ||; FUNCTION
    J'ai modifié la requete par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    Bonjour,

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select trim(char(mon_integer))
    from ma-table

  3. #3
    Nouveau membre du Club
    Inscrit en
    août 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    Bonjour merci de votre réponse mais aucun des 3 solutions ne marchent

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    Dans ce cas expliquez, avec un exemple, ce que veut dire cette phrase :
    Maintenant j'ai remarqué que la partie numero complète par des espaces blancs si toute la longueur du champs n'est pas renseigné.

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 : 16 678
    Points : 33 724
    Points
    33 724
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  6. #6
    Nouveau membre du Club
    Inscrit en
    août 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 : 16 678
    Points : 33 724
    Points
    33 724
    Billets dans le blog
    14
    Par défaut
    Ben retire les de ta requête !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (codeEmp || char(numero) || codService ) AS identifiant FROM employe
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  8. #8
    Nouveau membre du Club
    Inscrit en
    août 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    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

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    16 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    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 : 16 678
    Points : 33 724
    Points
    33 724
    Billets dans le blog
    14
    Par défaut
    Compare les deux requêtes...

    La tienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (codeEmp|| ' '||char(numero)|| ' '||codService ) AS identifiant FROM employe
    La mienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  10. #10
    Nouveau membre du Club
    Inscrit en
    août 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : août 2010
    Messages : 62
    Points : 36
    Points
    36
    Par défaut
    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

  11. #11
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    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)

  12. #12
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    4 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : février 2010
    Messages : 4 058
    Points : 7 278
    Points
    7 278
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT (codeEmp|| ' '||rtrim(char(numero))|| ' '||codService ) AS identifiant FROM employe
    On ne jouit bien que de ce qu’on partage.

  13. #13
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 217
    Points : 17 139
    Points
    17 139
    Par défaut
    Si la fonction char existe, je mets ma main à couper que la fonction varchar existe aussi.

  14. #14
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    février 2010
    Messages
    4 058
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : février 2010
    Messages : 4 058
    Points : 7 278
    Points
    7 278
    Billets dans le blog
    1
    Par défaut
    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
    On ne jouit bien que de ce qu’on partage.

  15. #15
    Expert confirmé
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 173
    Points : 5 337
    Points
    5 337
    Par défaut
    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.

  16. #16
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 217
    Points : 17 139
    Points
    17 139
    Par défaut
    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

Discussions similaires

  1. formater un champ de type string (Displayformat string)
    Par algeriano.29 dans le forum Delphi
    Réponses: 0
    Dernier message: 10/05/2015, 12h39
  2. [AC-2007] Champ de type String en date
    Par Abed_H dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 21/02/2010, 00h27
  3. Type de variable - Integer ou Long
    Par Domi2 dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/02/2008, 09h59
  4. Convertir un type String en Integer VB-A
    Par sebeni dans le forum Général VBA
    Réponses: 1
    Dernier message: 09/05/2007, 17h18
  5. [CR] les champs de type string
    Par yvescollet dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 05/10/2004, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo