2017-02-14 1 views
0

Ich habe eine Tabelle, die eine Liste von 13-stelligen Nummern enthält.Verwenden von Dekodierung für Fälle der Parameterpositionierung

Ich möchte Informatica verwenden, um diese Zahlen zu brechen und sie basierend auf Fällen zu trennen.

Zum Beispiel habe ich die Nummer 1196804120316. Für den ersten Fall möchte ich nur die zwei Ziffern nach dem 68 nehmen. In unserem Beispiel extrahiere ich die Nummer 04 und speichere sie in einer Spalte.

Der SQL-Code für sich ist:

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 

Der nächste Fall ist die Zahl nach 19 und speichert es zu nehmen. In diesem Fall wird die 68. Die SQL ist:

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, 

Wie würde ich dies mit decode in informatica implementieren?

+0

Die reguläre Ausdrücke scheinen zu versuchen, Zahlen mit Bindestrich in ihnen übereinstimmen. Aber die Nummer, die Sie versuchen übereinzustimmen, hat keinen Bindestrich '-' drin? – Samik

+0

Die Zahl '1196804120316' konnte nicht mit der Regex'^(19 | 20) übereinstimmen? [0-9] {2} - [0-9] {2} - [0-9] {5,6} $ ' – Samik

+0

Ich werde ein Punt nehmen und sagen, dass Sie die Zeichenfolge in mehrere Spalten mit SUBSTR() in den Ausdruck der einzelnen Spalten und dann wenden Sie Ihre Logik auf die kleineren Felder –

Antwort

0

Meine Lösung war, SUBSTR() in einem Ausdruck zu verwenden. Nach dem Importieren der Quelle aus der Tabelle, habe ich verwendet:

SUBSTR(COLUMN_NAME,6,2) 

Um Informatica zu sagen, welche Position der Zeichenfolge wollte ich zerlegt. Sobald es zerlegt wurde, würde der Ausdruck es in eine Variable einfangen.

0

Könnten Sie versuchen:

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 alle Funktionen von Oracle bietet. Verwenden Sie einfach die Formel, die ich oben gezeigt habe.