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

无UPDATE权限时,如何在SQL中去除varchar列首尾的字母

嘿,这个需求我太熟了!因为没有UPDATE权限,咱们没法直接修改表中的数据,所以只能在查询的时候动态提取出字符串里的数字部分。下面分几种常见的数据库给你具体的实现方案:

不同数据库的具体实现

MySQL/MariaDB

如果你的MySQL版本是8.0及以上,直接用REGEXP_REPLACE函数就能搞定,它可以把所有非数字的字符替换成空字符串:

SELECT REGEXP_REPLACE(your_column_name, '[^0-9]', '') AS only_numbers
FROM your_table_name;

要是你的版本低于8.0(没有REGEXP_REPLACE),可以考虑嵌套REPLACE把所有字母逐个替换掉,但这种方法比较繁琐(得把A-Z、a-z都列出来),优先建议升级版本或者用上面的方法。

SQL Server

SQL Server 2017及以上版本同样支持REGEXP_REPLACE,用法和MySQL差不多:

SELECT REGEXP_REPLACE(your_column_name, '[^0-9]', '') AS only_numbers
FROM your_table_name;

如果是更旧的版本,咱们可以写一个自定义函数来遍历字符串,只保留数字字符:

CREATE FUNCTION dbo.ExtractNumbers (@input VARCHAR(20))
RETURNS VARCHAR(20)
AS
BEGIN
    DECLARE @output VARCHAR(20) = ''
    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 dbo.ExtractNumbers(your_column_name) AS only_numbers
FROM your_table_name;

PostgreSQL

PostgreSQL里用REGEXP_REPLACE也很方便,记得加上'g'参数做全局替换,确保所有非数字字符都被清除:

SELECT REGEXP_REPLACE(your_column_name, '[^0-9]', '', 'g') AS only_numbers
FROM your_table_name;

Oracle

Oracle提供了两种常用方法:

  1. 使用REGEXP_REPLACE:
SELECT REGEXP_REPLACE(your_column_name, '[^0-9]', '') AS only_numbers
FROM your_table_name;
  1. 使用TRANSLATE函数,这种方法性能可能更好一些:
SELECT TRANSLATE(your_column_name, '0123456789' || your_column_name, '0123456789') AS only_numbers
FROM your_table_name;

这些方法都是在查询时动态处理数据,完全不会修改原表的内容,刚好符合你没有UPDATE权限的情况。如果你的数据库不在上面的列表里,可以告诉我具体类型,我再给你调整方案~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:04