2017-02-16 2 views
0

У меня есть выбор:oracle11g REGEXP_REPLACE для JSON

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_replace?

+0

Какова ваша цель, inpu и выход? –

+0

Можете ли вы определить, как результаты должны выглядеть при выполнении? –

ответ

0

Используйте (\d+)_(\d+), чтобы соответствовать только числовые значения, разделенные подчеркиванием:

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

Спасибо всем. Я нашел решение

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 
Смежные вопросы