我有数据
col1
[{value -> Apple, key -> Fruit}, {value -> White, key -> Colour}]
[{value -> Mango, key -> Fruit}, {value -> Black, key -> Colour}]
我想提取一个值
value -> White
value -> Black
select col1, instr('key -> Colour' in col1), substr(col1, instr('key -> Colour')
from
(SELECT '[{value -> Apple, key -> Fruit}, {value -> White, key -> Colour}]' as col1 from dual
union all
SELECT '[{value -> Mango, key -> Fruit}, {value -> Black, key -> Colour}]' as col1 from dual
) tbl;
我尝试使用位置和子字符串,但无法获得,如有任何建议我将不胜感激。
基本上需要搜索一个值键->颜色并通过反向子字符串提取值直到{这将让我得到值->白色和值->黑色
您可以从以using
value -> <value>
结尾 的开始搜索,然后替换usingkey -> Colour
REGEXP_SUBSTR
,key -> Colour
REGEXP_REPLACE
小提琴
如果您希望减少对“k -> v”对的顺序的依赖,则需要使用正则表达式进行进一步的解析:
您可以使用
REGEXP_SUBSTR
来查找匹配项:对于样本数据来说:
输出:
或者,不要尝试编码您自己的存储格式。如果您要使用与 JSON 格式略微相似的格式,那么实际上请使用 JSON 格式,而不是近似格式。
然后您可以使用适当的 JSON 解析器:
输出:
或者:
输出:
小提琴