You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从varchar2类型的列中分离出数字

从Oracle VARCHAR2类型带单位字符串中提取数字的实现方案

针对存储了类似(25KG)这类混合数字、单位、特殊符号的VARCHAR2字段,可通过Oracle内置正则函数快速提取数字部分,以下是不同场景的实现方案:

方案1:REGEXP_REPLACE 反向替换非数字字符(通用性最高)

核心逻辑是把所有不属于数字、小数点的字符全部替换为空,直接得到纯数字内容

  • 适用场景:单条字段值中仅存在1组有效数字,支持整数、小数提取
  • 实现代码:
SELECT REGEXP_REPLACE(你的字段名, '[^0-9.]', '') AS 提取后数字
FROM 你的表名;
  • 效果示例:输入(25KG)输出25,输入(37.8℃)输出37.8

方案2:REGEXP_SUBSTR 正向匹配数字序列

核心逻辑是直接匹配第一个连续的数字(可包含小数点)序列,适合字段中存在多段被非数字字符分隔的数字、仅需提取第一段的场景

  • 实现代码:
-- 仅提取正整数、正小数
SELECT REGEXP_SUBSTR(你的字段名, '\d+\.?\d*') AS 提取后数字
FROM 你的表名;

-- 如需支持提取负数,调整正则规则即可
SELECT REGEXP_SUBSTR(你的字段名, '-?\d+\.?\d*') AS 提取后数字
FROM 你的表名;

扩展:转换为数值类型用于计算

如果提取的数字需要后续做求和、比较等数值运算,可在外层包裹TO_NUMBER函数完成类型转换:

SELECT TO_NUMBER(REGEXP_REPLACE(你的字段名, '[^0-9.]', '')) AS 数值格式结果
FROM 你的表名;

注意事项:如果字段值存在多个小数点等异常格式,建议先完成异常数据清洗再执行提取逻辑,避免类型转换时报错。

内容的提问来源于stack exchange,提问作者Bishoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 15:39:02