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

如何在SQL中清理手机号列冗余内容,仅保留纯手机号

提取SQL列中的纯手机号方案

根据你的需求,需要从包含冗余前缀/后缀的字符串中提取纯手机号(连续数字),以下是不同主流数据库的实现方式:

MySQL/MariaDB

方案1:提取所有连续数字

SELECT REGEXP_SUBSTR(PHONE_NUMBER, '[0-9]+') AS CLEAN_PHONE_NUMBER
FROM your_table;

方案2:精准匹配+后的数字组(更可靠)

SELECT REGEXP_SUBSTR(PHONE_NUMBER, '\\+([0-9]+)', 1, 1, 'e') AS CLEAN_PHONE_NUMBER
FROM your_table;

'e'参数指定返回正则表达式中捕获组的内容,直接提取加号后的纯数字。

SQL Server

适用于所有版本:结合PATINDEX和SUBSTRING

SELECT SUBSTRING(PHONE_NUMBER, PATINDEX('%[0-9]%', PHONE_NUMBER), 
                 LEN(PHONE_NUMBER) - PATINDEX('%[0-9]%', REVERSE(PHONE_NUMBER)) - PATINDEX('%[0-9]%', PHONE_NUMBER) + 2) AS CLEAN_PHONE_NUMBER
FROM your_table;

SQL Server 2019+:用正则替换去掉非数字字符

SELECT REGEXP_REPLACE(PHONE_NUMBER, '[^0-9]', '') AS CLEAN_PHONE_NUMBER
FROM your_table;

Oracle

提取所有连续数字

SELECT REGEXP_SUBSTR(PHONE_NUMBER, '[0-9]+') AS CLEAN_PHONE_NUMBER
FROM your_table;

精准提取+后的数字组

SELECT REGEXP_SUBSTR(PHONE_NUMBER, '\+(\d+)', 1, 1, NULL, 1) AS CLEAN_PHONE_NUMBER
FROM your_table;

最后一个参数1表示返回第一个捕获组的内容。

PostgreSQL

精准匹配+后的数字组

SELECT (REGEXP_MATCH(PHONE_NUMBER, '\+(\d+)'))[1] AS CLEAN_PHONE_NUMBER
FROM your_table;

去掉所有非数字字符

SELECT REGEXP_REPLACE(PHONE_NUMBER, '[^0-9]', '', 'g') AS CLEAN_PHONE_NUMBER
FROM your_table;

补充说明

如果你的数据中,手机号始终是字符串里唯一的连续数字段,直接提取所有数字即可;如果存在其他数字冗余,优先使用精准匹配+后数字组的方案,避免误提取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:13:23