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

DataStage Discussion :

Conversion de données sans en perdre


Sujet :

DataStage

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 86
    Points : 68
    Points
    68
    Par défaut Conversion de données sans en perdre
    Bonjour,

    Je fonctionne en datastage 8.1.
    Voilà mon problème :
    En entrée j'ai un champ, appelons le Champ1, de type alphanumérique. Généralement les valeurs sont des nombres, mais parfois je peux avoir 123a456.
    En sortie, pour les valeurs numériques, je veux les conserver, du moins laisser la tambouille faite sur ce champ dans le transformer. Pour les valeurs contenant de l'alphanumérique je veux les passer à 0 pour la suite, et ainsi le champ devient un numérique dans le fichier de sortie.
    Comment faire? le Stringtodecimal me renvoie APT_CombinedOperatorController,0: Conversion error calling conversion routine decimal_from_string data may have been lost
    Et le case when que j'essaie d'utiliser en entrée dans le stage db2 me renvoie The data types of the result-expressions of a CASE expression or DECODE function are not compatible.
    Mon Case when :
    CASE WHEN (CAST(coalesce(Champ1,' ')as int))>0 THEN
    cast(coalesce(Champ1,' ')as int)
    ELSE '0'
    END AS Champ1

    A l'origine, pour Champ1 il y avait coalesce(Champ1,' '), donc je l'ai laissé.

    J'ai aussi essayé ceci :
    CASE (cast(Champ1) as int)
    WHEN coalesce(Champ1,' ')>0 THEN coalesce(Champ1,' ')
    ELSE 0
    END AS Champ1
    Mais ça me donne : An unexpected token ")" was found following "ASE (cast(ID_EDS_AML". Expected tokens may include: "<space>".
    Auriez-vous des conseils s'il vous plait?

  2. #2
    Candidat au Club
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut fonction Num
    Bonjour Stephanie,

    Je ne sais pas si je comprends bien ton besoin mais je pense à ceci :

    Si ton champ1 est déja en string pourquoi tu ne crée pas un stage variable test= Num(Champ1) , la fonction Num renverra 1 si ton champ1 est uniquement numérique ou est vide et il renverra 0 si ton Champ1 contient des caractères non numériques.

    Ensuite champ1 sera en sortie un numérique et tu dis dans ton transformer que si ton stage variable test=1 tu convertis Champ1 en decimal (StringToDecimal) et si test=0 alors Champ1=0.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 86
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Oui, Champ1 en entrée est un string, un char(15) pour être exacte.
    En fait, lorsqu'il y a une lettre je veux la remplacer par un zéro.
    En sortie, mon champ est alors un numeric.
    Dans un autre job quasi identique, lorsqu'il y a un caractère c'est toute la valeur du champ qui doit être transformé par un zéro.

    Comment dire remplace un alphanumérique par un zéro? le stringToDecimal ne fonctionne pas, et normal, puisqu'on ne peut convertir des caractères en nombres

  4. #4
    Candidat au Club
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Je ne vois pas de fonctions qui puisse le faire, donc soit une boucle dans le transformer (allant de 1 à longueur de champ1) ou alors un parallel routine ou tu mets champ1 en entrée et fais une boucle qui teste les caractères.

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2004
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 36
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Tu peux utiliser la fonction EREPLACE pour remplacer une chaine de caractères par une autre chaine.
    Ex: '1230456'=Ereplace(UpCase('123a456'), 'A', '0')

    Attention: il te faudra faire autant d'appels à cette fonction qu'il y aura de valeurs possibles comme caractères recherché

Discussions similaires

  1. Pb de conversion de données 16 vers 32
    Par Ducmonster dans le forum Langage
    Réponses: 2
    Dernier message: 09/10/2005, 11h53
  2. [JSTL] [SQL] Conversion de données
    Par GiHe dans le forum Taglibs
    Réponses: 4
    Dernier message: 27/09/2005, 10h01
  3. [Modèle Relationnel] Une base de données sans liens ni triggers
    Par Promeneur dans le forum Schéma
    Réponses: 15
    Dernier message: 27/05/2005, 10h35
  4. Développer une base de données sans BDE dans DELPHI 3 PRO
    Par ndlh721 dans le forum Bases de données
    Réponses: 3
    Dernier message: 05/02/2005, 14h21
  5. base de donné sans avoir un serveur!!
    Par Sawbo dans le forum Bases de données
    Réponses: 7
    Dernier message: 30/07/2004, 09h08

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