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

如何移除SQL列中的所有字母,仅保留数字?

解决数据库列中移除字母仅保留数字的问题

我来帮你搞定这个数据库清洗的问题!要移除指定列里的所有字母、只保留数字(比如把abc123def转成123),不同数据库的实现方式略有不同,下面是主流数据库的解决方案,记得操作前先备份数据或者先跑查询验证结果哦:

MySQL/MariaDB 解决方案

直接用REGEXP_REPLACE函数匹配所有非数字字符并替换为空:

-- 先验证结果是否符合预期
SELECT your_column, REGEXP_REPLACE(your_column, '[^0-9]', '') AS cleaned_column
FROM your_table;

-- 确认没问题后执行更新(只更新包含非数字的行,提升效率)
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, '[^0-9]', '')
WHERE your_column REGEXP '[^0-9]';

这里的[^0-9]是正则表达式,代表“不是0-9的任意字符”,把它们全部替换成空字符串就得到纯数字了。

PostgreSQL 解决方案

PostgreSQL同样支持REGEXP_REPLACE,用法和MySQL几乎一致:

-- 先验证
SELECT your_column, REGEXP_REPLACE(your_column, '[^0-9]', '', 'g') AS cleaned_column
FROM your_table;

-- 执行更新
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, '[^0-9]', '', 'g')
WHERE your_column ~ '[^0-9]';

注意这里的'g'参数表示全局替换(确保所有非数字字符都被移除),~是PostgreSQL里的正则匹配运算符。

SQL Server 解决方案

如果你的SQL Server是2016及以上版本,直接用REGEXP_REPLACE即可:

-- 验证
SELECT your_column, REGEXP_REPLACE(your_column, '[^0-9]', '') AS cleaned_column
FROM your_table;

-- 更新
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, '[^0-9]', '')
WHERE your_column LIKE '%[^0-9]%';

如果是2016以前的版本,没有内置正则函数,可以创建一个自定义函数来提取数字:

CREATE FUNCTION dbo.ExtractNumbers(@input VARCHAR(MAX))
RETURNS VARCHAR(MAX)
AS
BEGIN
    DECLARE @output VARCHAR(MAX) = '';
    DECLARE @i INT = 1;
    WHILE @i <= LEN(@input)
    BEGIN
        IF SUBSTRING(@input, @i, 1) BETWEEN '0' AND '9'
            SET @output = @output + SUBSTRING(@input, @i, 1);
        SET @i = @i + 1;
    END
    RETURN @output;
END;

-- 使用函数验证结果
SELECT your_column, dbo.ExtractNumbers(your_column) AS cleaned_column
FROM your_table;

-- 执行更新
UPDATE your_table
SET your_column = dbo.ExtractNumbers(your_column)
WHERE your_column LIKE '%[^0-9]%';

Oracle 解决方案

Oracle的REGEXP_REPLACE用法也很直观:

-- 先验证
SELECT your_column, REGEXP_REPLACE(your_column, '[^0-9]', '') AS cleaned_column
FROM your_table;

-- 执行更新
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, '[^0-9]', '')
WHERE REGEXP_LIKE(your_column, '[^0-9]');

重要提醒

  • 操作前务必备份数据,或者先执行SELECT语句确认清洗后的结果完全符合预期,再执行UPDATE
  • 如果表数据量很大,建议分批更新(比如加上LIMIT或者TOP限制每次更新的行数),避免长时间锁表影响业务
  • 如果列原本应该是数字类型,清洗完成后可以考虑修改列的数据类型为INT/BIGINT等,从根源上避免后续再导入字母

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:04:44