oracle 从具有不同值的字符串获取数字

8ehkhllq  于 2023-01-20  发布在  Oracle
关注(0)|答案(2)|浏览(167)

请帮我解决这个问题。
这是一张表:
| ID_客户端|价值观|
| - ------|- ------|
| 1个|0.46|
| 第二章|百分之二十五|
| 三个|无资料|
| 四个|二十二|
| 五个|十二、二|
| 六个|365%|
| 七|五十四|
我需要从字符串中得到百分比。
这是我需要从查询中获得的结果:
| 身份证|价值观|
| - ------|- ------|
| 1个|0.46|
| 第二章|二十五|
| 三个|零|
| 四个|零|
| 五个|十二、二|
| 六个|三六五|
| 七|五十四|
我尝试了一些regexp,我发现在这里,但这些没有正确工作。

tmb3ates

tmb3ates1#

正则表达式子字符串操作至少应该是一个很好的开始:

SELECT
    id_client,
    REGEXP_SUBSTR(values, '[0-9]+([,.][0-9]+)?') AS values
FROM yourTable;

上面的查询将使values列只包含数字 * 字符串 *。要获得实际的数字列,您需要某种额外的转换。您的数据似乎同时使用逗号和点作为小数位。您可能需要在我上面的答案的基础上进行额外的替换,以将浮点数转换为适合您的区域设置的正确格式。

zyfwsgd6

zyfwsgd62#

从字符串右侧修剪%字符,并将小数点规范化为单个字符,然后将TO_NUMBERDEFAULT NULL ON CONVERSION ERROR一起使用,DEFAULT NULL ON CONVERSION ERROR可从Oracle 12:

SELECT value,
       TO_NUMBER(
         REPLACE(RTRIM(value, '%'), ',', '.') DEFAULT NULL ON CONVERSION ERROR,
         '999999.99'
       ) AS number_value
FROM   table_name

其中,对于示例数据:

CREATE TABLE table_name (ID, value) AS
SELECT 1, '0,46' FROM DUAL UNION ALL
SELECT 2, '25%' FROM DUAL UNION ALL
SELECT 3, 'No information' FROM DUAL UNION ALL
SELECT 4, 'Twenty two' FROM DUAL UNION ALL
SELECT 5, '12.2' FROM DUAL UNION ALL
SELECT 6, '365%' FROM DUAL UNION ALL
SELECT 7, '54' FROM DUAL;

输出:
| 价值|数值|
| - ------|- ------|
| 0.46|点四六|
| 百分之二十五|二十五|
| 无资料|* 无效 |
| 二十二|
无效 *|
| 12.2 |十二、二|
| 365%|三六五|
| 五十四|五十四|
fiddle

相关问题