oracle11g regexp_替换json

oracle11g regexp_替换json,json,oracle,oracle11g,Json,Oracle,Oracle11g,我选择: select regexp_replace(regexp_substr('[{"date": "01_2016", "val":"100_22"},{"date": "02_2016","val": "200.10"}]' ,'"val":\s*("(\w| )*")', 1, level) ,'"val":\s*"((\w| )*)"', '\1', 1, 1) val from dual connect by regexp_substr('[{"date": "01_2016",

我选择:

select regexp_replace(regexp_substr('[{"date": "01_2016", "val":"100_22"},{"date": "02_2016","val": "200.10"}]'
,'"val":\s*("(\w| )*")', 1, level)
,'"val":\s*"((\w| )*)"', '\1', 1, 1) val
from dual
connect by regexp_substr('[{"date": "01_2016", "val":"100_22"},{"date": "02_2016","val": "200.10"}]', '"val":\s*("(\w| )*")', 1, level) is not null
;
如果我的值的格式为100_10,则可以。但是我想要100.10,这个选择不支持这个。如何编写regexp\u替换

使用
(\d+)\uuz(\d+)
仅匹配由下划线分隔的数值:

SELECT REGEXP_REPLACE(
         '[{"date": "01_2016", "val":"100_22"},{"date": "02_2016","val": "200.10"}]',
         '"val":"(\d+)_(\d+)"',
         '"val":"\1.\2"'
       )
FROM   DUAL;

谢谢大家。我找到了解决办法

 select regexp_replace(regexp_substr('[{"date": "01-2016", "val":"100.22"},{"date": "02-2016","val": "200.10"},{"date": "03-2016","val": "200.15"}]','"val":\s*("(\w|[..])*")', 1, level),'"val":\s*"((\w|[..])*)"', '\1', 1, 1) val, regexp_replace(regexp_substr('[{"date": "01-2016", "val":"100.22"},{"date": "02-2016","val": "200.10"},{"date": "03-2016","val": "200.15"}]' ,'"date":\s*("(\w|[-])*")', 1, level) ,'"date":\s*"((\w|[-])*)"', '\1', 1, 1) date_period from dual connect by regexp_substr('[{"date": "01-2016", "val":"100.22"},{"date": "02-2016","val": "200.10"},{"date": "03-2016","val": "200.15"}]', '"val":\s*("(\w|[..])*")', 1, level) is not null

你的目的是什么,输入和输出?你能确定结果在执行时应该是什么样子吗?