使用解码参数定位案例

Using decode for parameter positioning cases

我有一个 table,其中包含一个 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)
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)
 ELSE ODS_CI_RPT.ADMIN.REGEXP_REPLACE(DEC_REGISTRN_NBR,'^([0-9]{4})-.*','',1,1)
 END
 AS 
 D_BIRTH_YEAR,

我如何使用 informatica 中的 decode 实现这个?

你能试试吗:

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 的所有功能。所以只要使用我上面显示的公式.....

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

SUBSTR(COLUMN_NAME,6,2)

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