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

使用Oracle REGEXP_SUBSTR提取字符串中的天数数字问题

解决Oracle中提取天数数字的正则问题

问题分析

你当前的正则表达式REGEXP_SUBSTR(str,'[(0-9)]+[?=Days]')存在两个关键错误:

  • [(0-9)]是错误的字符集定义,它会匹配括号(、)和数字,正确的数字匹配应该用[0-9]+或\d+(Oracle中\d等价于[0-9])。
  • [?=Days]把正向预查的语法用错了,方括号会将?=视为普通字符,最终匹配数字后的第一个D,导致结果带上D。

正确解决方案

方案1:使用正向预查(Oracle 11g及以上支持)

修正正则表达式,利用正向预查确保数字后紧跟Days或Day,但不包含这些字符在匹配结果中:

REGEXP_SUBSTR(str, '[0-9]+(?=Days|Day)')
  • 测试示例:
    • 输入FR_OTC 0 THB Local 10GB 10400601 15Days T2T → 返回15
    • 输入FR_OTC 0 THB Local 10GB 1Day T2T → 返回1

方案2:兼容低版本Oracle(如10g及以前)

如果你的Oracle版本不支持正向预查,可以先用正则匹配数字+Days/Day的组合,再通过替换提取数字部分:

REGEXP_REPLACE(str, '.*([0-9]+)(Days|Day).*', '\1')
  • 原理:通过捕获组\1提取数字部分,将整个字符串替换为捕获到的数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:45:00