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
相关产品推荐
相关产品推荐

