首页 > 解决方案 > Oracle SQL 查询中的正则表达式 - 仅限数字和句点

问题描述

在 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]我只有没有一点的数字。

标签: sqlregexoracleoracle-apex

解决方案


如果您使用的是 Oracle 数据库 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

推荐阅读