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

Oracle如何移除phone_number列开头的0、93、0093指定前缀字符

Oracle 移除phone_number列指定前缀的实现方案

核心注意事项

要移除的前缀包含0、93、0093三种,其中0093长度最长,处理时必须优先匹配最长前缀,否则会出现截断错误:比如0093开头的号码如果先匹配到前缀0,只会截掉首位0,剩下093开头的错误结果。

实现方法

方法1:正则替换(写法简洁,适合绝大多数场景)

用REGEXP_REPLACE函数,正则规则中把最长的前缀放在多选分支最前面,匹配字符串开头的目标前缀后替换为空即可。

  • 查询验证处理结果的语句:
SELECT
  phone_number AS 原始号码,
  REGEXP_REPLACE(phone_number, '^(0093|93|0)', '') AS 处理后号码
FROM 你的表名;
  • 确认结果无误后,可直接执行更新语句批量修改数据:
UPDATE 你的表名
SET phone_number = REGEXP_REPLACE(phone_number, '^(0093|93|0)', '');
-- 建议执行后先核对结果,再执行COMMIT提交事务

方法2:CASE WHEN逐段判断(性能更高,适合超大数据量场景)

如果表数据量达到千万级以上,正则替换可能存在性能开销,可以用CASE WHEN按优先级判断前缀,再用SUBSTR截取对应长度的字符串,逻辑完全可控,执行效率更高:

SELECT
  phone_number AS 原始号码,
  CASE
    WHEN phone_number LIKE '0093%' THEN SUBSTR(phone_number, 5) -- 0093占4位,从第5位开始截取
    WHEN phone_number LIKE '93%' THEN SUBSTR(phone_number, 3)  -- 93占2位,从第3位开始截取
    WHEN phone_number LIKE '0%' THEN SUBSTR(phone_number, 2)   -- 0占1位,从第2位开始截取
    ELSE phone_number -- 没有匹配到任何前缀则保留原值
  END AS 处理后号码
FROM 你的表名;

样例数据验证结果

用题目给出的样例数据测试,两种方法都能得到预期结果:

  • 原始值078912354 → 处理后78912354
  • 原始值93784385483 → 处理后784385483
  • 原始值009378248448 → 处理后78248448
  • 原始值776868886 → 处理后776868886

注意:生产环境执行UPDATE操作前,建议先备份对应列数据,通过SELECT语句核对处理结果完全符合预期后再提交修改,避免误改数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:30:54