使用解码参数定位案例

时间:2017-02-14 16:05:27

标签: sql informatica-powercenter

我有一张包含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中的解码实现此功能?

2 个答案:

答案 0 :(得分: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的所有功能。所以只需使用我上面显示的公式.....

答案 1 :(得分:0)

我的解决方案是在表达式中使用SUBSTR()。从表中导入源代码后,我使用了:

SUBSTR(COLUMN_NAME,6,2)

告诉Informatica我想要分解的字符串的位置。一旦它被分解,表达式就会将它捕获到一个变量中。