2017-02-14 3 views
0

У меня есть таблица, которая содержит список из 13 цифр.Использование декодирования для случаев позиционирования параметров

Я хочу использовать informatica, чтобы разбить эти цифры и разделить их на основе случаев.

Например, у меня есть номер 1196804120316. Для первого случая я хочу взять только две цифры после 68. В нашем примере я извлекаю номер 04 и сохраняю его в столбце.

SQL-код для него является:

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 

Следующий случай взять номер после 19 и сохранить его. В этом случае 68. SQL, является:

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, 

Как бы реализовать это с помощью декодирования в Informatica?

+0

Регулярные выражения, похоже, пытаются сопоставить числа с дефисом в них. Но число, которое вы пытаетесь сопоставить, не имеет дефиса '-' в нем? – Samik

+0

Число '1196804120316' не может совпадать с регулярным выражением'^(19 | 20)? [0-9] {2} - [0-9] {2} - [0-9] {5,6} $ ' – Samik

+0

Я собираюсь взять пунт и сказать, что вы хотите разделить строку на несколько столбцов, используя SUBSTR() в выражении каждого, а затем применить свою логику к меньшим полям. –

ответ

0

Моим решением было использовать SUBSTR() в выражении. После импорта источника из таблицы, я использовал:

SUBSTR(COLUMN_NAME,6,2) 

Рассказывать Informatica, положение строки я хотел сломался. Как только он будет разбит, выражение будет захватывать его в переменную.

0

Не могли бы вы попробовать:

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 предлагает все функции Oracle. Поэтому просто используйте формулу, показанную выше .....

Смежные вопросы