-->

的PowerCenter REG_EXTRACT问题(PowerCenter REG_EXTRACT

2019-11-03 16:06发布

我有一个问题,从Oracle转换REGEXP_SUBSTR在PWC(9.5.1)到REG_EXTRACT。

在Oracle中,我有以下声明:

select 
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,1)  FIELD1,
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,2)  FIELD2,
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,3)  FIELD3,
regexp_substr('AA          12345678               *             123','[^' || CHR (9) || ']+', 1,4)  FIELD4
from    DUAL;

结果:

FIELD1=AA
FIELD2=12345678
FIELD3=*
FIELD4=123

在PWC我已经创建了4个端口具有相似的正则表达式转换:

FIELD1=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,1)
FIELD2=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,2)
FIELD3=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,3)
FIELD4=REG_EXTRACT('AA          12345678               *             123','([^\s]+)', 1,4)

结果:

FIELD1=NULL
FIELD2=NULL
FIELD3=NULL
FIELD4=NULL

为什么我得到现场[1-4] NULL值? 任何人都可以帮我这个问题?

谢谢 !

Answer 1:

的第三和第四参数REGEXP_SUBSTRREG_EXTRACT是不同的- Oracle的position (第三参数)是PowerCenter的match_from_start (第四参数), occurrencesubPatternNum类似地切换。

尝试使用下面的表达式:

FIELD1=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 1)
FIELD2=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 2)
FIELD3=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 3)
FIELD4=REG_EXTRACT('AA  12345678  *  123', '([^\s]+)\s+([^\s]+)\s+([^\s]+)\s+([^\s]+)', 4)

这里有一个列表REG_EXTRACT参数:

  1. subject -值要与之比较的正则表达式模式
  2. pattern -要匹配正则表达式模式; 括在括号每个子模式
  3. subPatternNum -要匹配的正则表达式的子模式数
  4. match_from_start -如果匹配从字符串的开头找到,则返回的字符串; 请使用以下原则来确定从起始值比赛:
    • 0 - 匹配与来自起始索引或任何索引对象字符串模式
    • 非零 - 从起始索引相匹配与主题串图案


文章来源: PowerCenter REG_EXTRACT issue