在Oracle SQL查询中,有一个字段包含以下内容(示例(:
{"ID Card": 0.29333333333333333} or {"Speedtest": 0.8166666666666667}
例如,我可以使用RegEx来输出查询中的字段,以便只保留数字和句点吗?
示例:
Select ID, CREATEDFORMAT, INSERT_TS, regexp_substr(SCORE, '[^0-9]') xSCORE FROM MYTABLE
但对于[^ 0-9]
,我只有没有点的数字。
如果您使用的是Oracle Database 12.1.0.2或更高版本,并且您试图解析的数字始终在JSON对象中,则可以使用JSON_VALUE函数提取信息。
查询
WITH
sample_data
AS
(SELECT '{"ID Card": 0.29333333333333333}' AS sample_val FROM DUAL
UNION ALL
SELECT '{"Speedtest": 0.8166666666666667}' FROM DUAL)
SELECT s.sample_val, json_value (s.sample_val, '$.*') AS number_val
FROM sample_data s;
结果
SAMPLE_VAL NUMBER_VAL
____________________________________ ______________________
{"ID Card": 0.29333333333333333} 0.29333333333333333
{"Speedtest": 0.8166666666666667} 0.8166666666666667
使用
REGEXP_SUBSTR(SCORE, '[-+]?[0-9]*.?[0-9]+')
查看验证
解释
--------------------------------------------------------------------------------
[-+]? any character of: '-', '+' (optional
(matching the most amount possible))
--------------------------------------------------------------------------------
[0-9]* any character of: '0' to '9' (0 or more
times (matching the most amount possible))
--------------------------------------------------------------------------------
.? '.' (optional (matching the most amount
possible))
--------------------------------------------------------------------------------
[0-9]+ any character of: '0' to '9' (1 or more
times (matching the most amount possible))
使用:REGEXP_SUBSTR (s.sample_val, '[+-]?[0-9]+[.]?[0-9]+')
请参阅此演示:https://dbfiddle.uk/?rdbms=oracle_18&fiddle=76c2b3be1d7d266f217d6b0541478c17
结果:
SAMPLE_VAL NUMBER_VAL
---------------------------------- --------------------
{"ID Card": 0.29333333333333333} 0.29333333333333333
{"Speedtest": 0.8166666666666667} 0.8166666666666667
{"texts": 12.3456} 12.3456
{"texts": -65} -65
这是对@Ryszard捷克语帖子的更改。