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

如何利用SUBSTR函数处理含位置的手机号,实现查询与位置还原

使用SUBSTR函数拆分电话号码与归属地的解决方案

核心思路

利用SUBSTR结合位置查找函数(如MySQL的LOCATE、Oracle的INSTR),精准拆分出电话号码和归属地两部分:

  • 电话号码:截取竖线|之前的所有字符
  • 归属地:截取竖线|之后的所有字符

分数据库实现示例

1. MySQL环境

假设存储数据的字段名为phone_info,表名为user_contacts,可以用以下SQL同时提取两个部分:

SELECT
  -- 提取电话号码:存在|则取到其前一位,否则取全字段
  SUBSTR(phone_info, 1, IF(LOCATE('|', phone_info) > 0, LOCATE('|', phone_info) - 1, LENGTH(phone_info))) AS phone_number,
  -- 提取归属地:存在|则取其后的内容,否则返回空
  SUBSTR(phone_info, IF(LOCATE('|', phone_info) > 0, LOCATE('|', phone_info) + 1, LENGTH(phone_info) + 1)) AS location
FROM user_contacts;
  • 你可以先导出phone_number列去查询活跃号码
  • 保留这条查询的完整结果(关联phone_number和location),后续统计时直接通过号码匹配归属地即可

2. Oracle环境

Oracle中用INSTR替代LOCATE,写法如下:

SELECT
  CASE 
    WHEN INSTR(phone_info, '|') > 0 THEN SUBSTR(phone_info, 1, INSTR(phone_info, '|') - 1)
    ELSE phone_info 
  END AS phone_number,
  CASE 
    WHEN INSTR(phone_info, '|') > 0 THEN SUBSTR(phone_info, INSTR(phone_info, '|') + 1)
    ELSE NULL 
  END AS location
FROM user_contacts;

注意事项

  • 如果部分数据没有竖线|(只有纯号码),上述SQL会自动处理:号码取全字段,归属地为空
  • 若字段中存在多个竖线,LOCATE/INSTR只会匹配第一个竖线,符合你的需求(因为号码在第一个竖线前)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:48:58