我有一个包含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,
我将如何在信息中使用解码来实现这一点?
你能试试吗:
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((。从表中导入源后,我使用了:
SUBSTR(COLUMN_NAME,6,2)
告诉 Informatica 我想分解字符串的哪个位置。一旦它被分解,表达式就会将其捕获到一个变量中。