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

cfh9epnr  于 2022-11-22  发布在  Oracle
关注(0)|答案(2)|浏览(246)

请 帮 我 解决 这个 问题 。 表 :
id _ client , 值
| 标识|价值 观|
| - -| - -|
| 一 个|0.46 英寸|
| 2 个|百分 之 二十五|
| 三 个|无 信息|
| 四 个|二十二|
| 五 个|12.2 节|
| 六 个|百分 之 三百 六十五|
| 七 个|五十四|
我 需要 从 字符 串 中 获取 百分比 值
需要 采石 场 的 下 一 个 结果
| 标识|价值 观|
| - -| - -|
| 一 个|0.46 英寸|
| 2 个|二十五 个|
| 三 个|零 值|
| 四 个|零 值|
| 五 个|12.2 秒|
| 六 个|三百 六十五|
| 七 个|五十四|
尝试 了 一些 正则 表达式 , 我 发现 在 这里 , 但 它 的 工作 错误

carvr3hs

carvr3hs1#

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

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

上面的查询会使values列只剩下numeric strings。要得到一个实际的numeric列,您需要进行某种类型的转换。您的数据似乎同时使用逗号和点作为小数位。您可能需要在我上面的答案的基础上进行一个额外的替换,以使浮点数成为适合您的区域设置的正确格式。

prdp8dxp

prdp8dxp2#

从 字符 串 的 右侧 删除 % 字符 , 并 将 小数 点 规范 化 为 单个 字符 , 然后 将 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 |12.2 节|
| 百分 之 三百 六十五|三百 六十五|
| 五十四|五十四|
fiddle 的 最 大 值

相关问题