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

Informatica Discussion :

Récupérer l'année d'un champ date


Sujet :

Informatica

  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 Récupérer l'année d'un champ date
    Bonjour,

    ma question est toute simple : en entrée j'ai un champ date au format date/time, en sortie je dois avoir seulement l'année de ce champ au format integer.

    Dans mon bloc SQL j'ai testé ce ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT EXTRACT(YEAR FROM (etb_datecreation)) as ANNEE_CREATION,etablissements.etb_siret
    FROM
     etablissements
    Mais quand je lance le mapping la log me dit que le champ ANNEE_CREATION n'existe pas en source, or si j'enlève l'alias ça ne marche guère mieux...

    Des idées?

    Merci de votre aide

  2. #2
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 879
    Points : 26 147
    Points
    26 147
    Billets dans le blog
    3
    Par défaut
    J'essaie d'imaginer ce que ça peut dire, mais sans log c'est un peu compliqué ^^ le problème vient vraisemblablement de la source.

    La première chose qui me vient à l'esprit est un problème de coordination au niveau des types de champ :

    Ton EXTRACT renvoie un NUMBER, PowerCenter attend donc dans ton SQ (et ton expression ou cible après le SQ) un champ ANNEE_CREATION de type Integer.

    Par homogénéité, il faut donc que tu fasses un lien entre ta source et ton Source Qualifier, de deux champs de type Integer ! Il faut donc qu'il y ait au moins un champ Integer dans ta table source que tu relies à Année création.

    PS : au fait, sais-tu qu'il existe une fonction Get_date_part dans les expressions d'Informatica qui peut faire exactement ce que tu demandes ? tu n'auras plus besoin de triturer ta base de données !
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  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
    Citation Envoyé par Glutinus Voir le message
    PS : au fait, sais-tu qu'il existe une fonction Get_date_part dans les expressions d'Informatica qui peut faire exactement ce que tu demandes ? tu n'auras plus besoin de triturer ta base de données !
    Finalement j'ai opté pour cette solution, que je ne connaissais pas. Merci

    GET_DATE_PART(etb_datecreation,'yyyy')

    En revanche autre petite question :
    lorsque je fais mon mapping il tourne nikel mais j'ai une quarantaine de lignes avec '0000' en ANNEE_CREATION, le problème ne vient pas de la source après avoir cherché, et lorsque dans le designer je fais :
    iif (ANNEE_CREATION=0000,Var, ANNEE_CREATION) : var étant une variable qui ne contient rien, je n'ai plus que 38 lignes qui ont ANNEE_CREATION à 0000

    si je fais iif (ANNEE_CREATION=0000,NULL, ANNEE_CREATION) : toujours 42 lignes en 0000, que j'écrive null en minuscules ou en majuscules, et que je place le terme dans ma variable ne change rein non plus.

    Une idée pour remplacer mes 0000 par du vide (NULL) ?
    Encore merci pour vos coups de main

  4. #4
    Inactif  

    Homme Profil pro
    Freelance EURL / Business Intelligence ETL
    Inscrit en
    Avril 2005
    Messages
    5 879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance EURL / Business Intelligence ETL
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2005
    Messages : 5 879
    Points : 26 147
    Points
    26 147
    Billets dans le blog
    3
    Par défaut
    C'est bizarre, tu dis voir 0000 ? Normalement, le retour de get_date_part est un entier. Cela veut-il dire qu'à un moment de ton mapping, ton ANNEE_CREATION n'est plus un entier ?

    Je suppose qu'il faut essayer de tester selon le type (si c'est 0000, il y a des chances que ce soit une chaîne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIF(ANNEE_CREATION=0,NULL, ANNEE_CREATION)
    si ANNEE_CREATION demeure un integer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ou IIF(ANNEE_CREATION='0000',NULL, ANNEE_CREATION)
    si ANNEE_CREATION est une chaîne.

    Est-il possible de nous trouver un extrait de la log (en faisant par exemple un verbose data sur l'expression qui traduit) sur un bloc de l'expression qui finit par 0000 ?
    - So.... what exactly is preventing us from doing this?
    - Geometry.
    - Just ignore it !!
    ****
    "The longer he lived, the more he realized that nothing was simple and little was true" A clash of Kings, George R. R. Martin.
    ***
    Quand arrivera l'apocalypse, il restera deux types d'entreprise : les pompes funèbres et les cabinets d'audit. - zecreator, 21/05/2019

  5. #5
    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
    Effectivement, à certains endroits ANNEE_CREATION était un small integer : cela crée-t-il une grosse différence?

    Je teste en integer partout, sauf dans la cible et donc dans le bloc d'update.

    Résultat :
    Aucun changement !

    Avant de relancer le mapping j'ai fait un update à la main dans ma base pour mettre les lignes ayant l'annee_creation à 0000 en null, après le mapping ces fameuses lignes apparaissent ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MAPPING> TM_6253 Target Load Summary.
    MAPPING> CMN_1740 Table: [entreprise] (Instance Name: [entreprise])
    	 Output Rows [419731], Affected Rows [42], Applied Rows [419731], Rejected Rows [0]
    Cela peut-il être un souci de jointures? Alors que mes milliers d'autres lignes sont bonnes?
    Même problème en vidant ma colonne et en modifiant l'update vers un insert...

  6. #6
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2010
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2010
    Messages : 73
    Points : 93
    Points
    93
    Par défaut
    Bonjour,

    avec énormément de retard :
    estc e que ton champ etb_datecreation de la table source est toujours renseigné ? Si non, je pense les valeurs 0000 renvoyées par la fonction get_date_... correspondent aux lignes dont etb_datecreation est null;

    Pour faire propre tu dois faire dans le code du champ ANNEE_CREATION :
    iif(ISNULL(etb_datecreation), etb_datecreation, GET_DATE_PART(etb_datecreation, 'YYYY')).

    On traite la valeur null avant l'appel de la fonction et non après.

Discussions similaires

  1. [MySQL] Récupérer le mois et l'année d'un champ date pour instruction WHERE
    Par Auresky dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 12/02/2013, 15h48
  2. Réponses: 2
    Dernier message: 13/10/2008, 14h37
  3. Récupérer l'année dans un champ date
    Par griese dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/07/2006, 16h23
  4. [SQL Server] Selectionner juste l'année d'un champ date
    Par calison3 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/03/2006, 12h35
  5. récuperer année d'un champ date
    Par tomm dans le forum Bases de données
    Réponses: 11
    Dernier message: 12/05/2004, 16h24

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