regexp_substr跳过空位

Mik*_*ike 1 regex oracle plsql

使用此代码返回管道分隔字符串中的第n个值...

regexp_substr(int_record.interfaceline, '[^|]+', 1, i)
Run Code Online (Sandbox Code Playgroud)

当所有值都存在时,它工作正常

Mike|Male|Yes|20000|Yes所以3rd价值是Yes(正确的)

但如果字符串是

Mike|Male||20000|Yes,第3个值是20000(不是我想要的)

如何判断表达式不跳过空值?

TIA

麦克风

tbo*_*one 6

regexp_substr以这种方式工作:

如果occurrence大于1,则数据库将搜索第二次出现,从第一次出现模式后的第一个字符开始,依此类推.此行为与SUBSTR函数不同,后者开始在第一次出现的第二个字符处搜索第二个匹配项.

因此模式[^ |]将查找非管道,这意味着它将跳过连续管道("||")以查找非管道字符.

你可以试试:

select trim(regexp_substr(replace('A|test||string', '|', '| '), '[^|]+', 1, 4)) from dual;
Run Code Online (Sandbox Code Playgroud)

这将取代"|" 使用"|"并允许您根据模式进行匹配[^ |]