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

ACCESS SQL:如何用通配符提取PhoneNumber字段中的纯电话号码?

提取PERSONS表中PhoneNumber列的纯电话号码并替换

当然可以提取符合###-###-####格式的纯电话号码,下面针对主流数据库给出具体实现方式,执行前建议先通过查询验证结果,再进行更新/插入操作:

MySQL 实现

利用REGEXP_SUBSTR函数直接匹配正则表达式提取目标子串:

-- 先查询验证提取结果
SELECT 
  PhoneNumber,
  REGEXP_SUBSTR(PhoneNumber, '[0-9]{3}-[0-9]{3}-[0-9]{4}') AS PurePhoneNumber
FROM PERSONS;

-- 验证无误后,更新原列(若需保留原数据,可新增列存储提取结果)
UPDATE PERSONS
SET PhoneNumber = REGEXP_SUBSTR(PhoneNumber, '[0-9]{3}-[0-9]{3}-[0-9]{4}')
WHERE REGEXP_SUBSTR(PhoneNumber, '[0-9]{3}-[0-9]{3}-[0-9]{4}') IS NOT NULL;

SQL Server 实现

通过PATINDEX定位目标格式的起始位置,再用SUBSTRING截取:

-- 查询验证提取结果
SELECT 
  PhoneNumber,
  SUBSTRING(PhoneNumber, PATINDEX('%[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]%', PhoneNumber), 12) AS PurePhoneNumber
FROM PERSONS;

-- 更新原列
UPDATE PERSONS
SET PhoneNumber = SUBSTRING(PhoneNumber, PATINDEX('%[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]%', PhoneNumber), 12)
WHERE PATINDEX('%[0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]%', PhoneNumber) > 0;

注:SQL Server 2016及以上版本也支持REGEXP_SUBSTR函数,用法和MySQL类似。

PostgreSQL 实现

借助SUBSTRING的正则匹配功能提取目标号码:

-- 查询验证提取结果
SELECT 
  PhoneNumber,
  SUBSTRING(PhoneNumber FROM '[0-9]{3}-[0-9]{3}-[0-9]{4}') AS PurePhoneNumber
FROM PERSONS;

-- 更新原列
UPDATE PERSONS
SET PhoneNumber = SUBSTRING(PhoneNumber FROM '[0-9]{3}-[0-9]{3}-[0-9]{4}')
WHERE PhoneNumber ~ '[0-9]{3}-[0-9]{3}-[0-9]{4}';

注意事项

  • 以上语句会提取每条记录中第一个符合格式的号码,若存在多条符合格式的特殊情况,需额外调整逻辑。
  • 执行更新操作前务必先运行查询语句确认提取结果正确,避免误操作。
  • 若需保留原始数据,建议新增一列(如PurePhoneNumber)存储提取后的号码,再根据业务需求进行后续处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:33:14