Oracle SQL查询中的Regex-仅限数字和句点



在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捷克语帖子的更改。

相关内容

  • 没有找到相关文章

最新更新