所有
我的输入数据有以下格式,
"CUStid":["201","217"],"HireDate":"2016-06-24","EndDate":"2016-08-23"
(或)
"CUStid":["301",""],"HireDate":"2016-06-24","EndDate":"2016-08-23"
我需要输入输入数据中的客户ID,当我运行以下内容时,它返回null
(REGEXP_SUBSTR (inputdata,
'"CUStid":"([^"]*)"',
1,
1,
NULL,
1))
预期输出为:
CUStid1 Custid2
201 217
301
有人可以告诉我如何在oracle 11g中执行此操作
由于
答案 0 :(得分:1)
使用
REGEXP_SUBSTR (inputdata,'"CUStid":"\[(.+)\]"',1,1,null,1)
[
和]
应使用\
进行转义。
获取"301",""
,"201","217"
使用字符串操作将多个值作为单独的列获取。
如果最多可以使用,
使用
select
substr(replace(val,'"',''), 1, instr(replace(val,'"',''),',')-1) custid1
,substr(replace(val,'"',''), instr(replace(val,'"',''),',')+1) custid2
from (select REGEXP_SUBSTR (inputdata,'"CUStid":"\[(.+)\]"',1,1,null,1) val
from tablename)
答案 1 :(得分:0)
快速回答是,在您的搜索模式中,您错过了[
。
它应该是:
'"CUStid":["([^"]*)"'
(注意冒号[
后面的:
)
...实际上(TESTING HELPS!)[是正则表达式中的元字符,因此必须对其进行转义:
'"CUStid":\["([^"]*)"'
更长的答案是你需要能够获得第二个客户ID,但也许你已经知道如何做到这一点。祝你好运!
已修改
以下是完整查询:
with inputs (inputdata) as (
select '"CUStid":["201","217"],"HireDate":"2016-06-24","EndDate":"2016-08-23"' from dual
union all
select '"CUStid":["301",""],"HireDate":"2016-06-24","EndDate":"2016-08-23"' from dual
)
select regexp_substr(inputdata, '"CUStid":\["([^"]*)"', 1, 1, null, 1) as custid1,
regexp_substr(inputdata, '"CUStid":\["[^"]*","([^"]*)"', 1, 1, null, 1) as custid2
from inputs;
结果:
CUSTID1 CUSTID2
---------- ----------
201 217
301
2 rows selected.