2017-02-14 1 views
0

J'ai un tableau qui contient une liste de 13 chiffres. Je veux utiliser informatica pour décomposer ces nombres et les séparer en fonction des cas. Par exemple, j'ai le numéro 1196804120316. Pour le premier cas, je souhaite prendre seulement les deux chiffres après le 68. Dans notre exemple, j'extraire le numéro 04 et le stocker dans une colonne.Utilisation du décodage pour les cas de positionnement de paramètres

Le code SQL car il est:

CASE WHEN ODS_CI_RPT.ADMIN.REGEXP_LIKE(DEC_REGISTRN_NBR,'^(19|20)?[0-9]{2}-[0-9]{2}-[0-9]{5,6}$') 
THEN 
ODS_CI_RPT.ADMIN.REGEXP_REPLACE(DEC_REGISTRN_NBR,'.*-([0-9]{2})-.*','\1',1,1) 
ELSE '05' 
END 
AS 
STATE_CODE 

Le cas suivant est de prendre le nombre après le 19 et le stocker. Dans ce cas, le 68. Le SQL est:

CASE WHEN ODS_CI_RPT.ADMIN.REGEXP_LIKE(DEC_REGISTRN_NBR,'^(19|20)?[0-9]{2}-[0-9]{2}-[0-9]{5,6}$') THEN 
ODS_CI_RPT.ADMIN.REGEXP_REPLACE(DEC_REGISTRN_NBR,'^([0-9]{2,4})-.*','\1',1,1) 
ELSE ODS_CI_RPT.ADMIN.REGEXP_REPLACE(DEC_REGISTRN_NBR,'^([0-9]{4})-.*','\1',1,1) 
END 
AS 
D_BIRTH_YEAR, 

Comment pourrais-je mettre en œuvre cela en utilisant decode dans informatica?

+0

Les expressions régulières semblent essayer de faire correspondre des nombres avec des traits d'union. Mais le numéro que vous essayez de faire correspondre n'a pas de trait d'union «-» dedans? – Samik

+0

Le nombre '1196804120316' ne pouvait pas correspondre à la regex'^(19 | 20)? [0-9] {2} - [0-9] {2} - [0-9] {5,6} $ ' – Samik

+0

Je vais prendre un punt et dire que vous voulez diviser la chaîne en plusieurs colonnes en utilisant SUBSTR() dans l'expression de chacun et ensuite appliquer votre logique sur les champs plus petits –

Répondre

0

Ma solution était d'utiliser SUBSTR() dans une expression. Après avoir importé la source de la table, je:

SUBSTR(COLUMN_NAME,6,2) 

Pour dire Informatica quelle position de la chaîne que je voulais en panne. Une fois décomposée, l'expression la capturerait dans une variable.

0

Pourriez-vous essayer:

WITH 
input(literal) AS (
SELECT '1196804120316' 
) 
SELECT 
    -- use below in PowerCenter 
    MONTH(TO_DATE(SUBSTR(literal,2),'YYYYMMDDHHMI')) 
    -- use above in PowerCenter 
    AS the_month 
FROM input; 

the_month 
     4 

Power Center offre toutes les fonctions d'Oracle. Il suffit donc d'utiliser la formule que je montre ci-dessus .....