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

如何在VARCHAR列的字符与数字之间添加特殊字符?

在字符与数字间添加下划线的SQL实现

可以通过正则表达式替换函数实现这个需求,不同数据库的具体语法略有差异,以下是主流数据库的实现方式:

MySQL/MariaDB

使用REGEXP_REPLACE函数匹配字母与数字、数字与字母的边界,插入下划线:

SELECT REGEXP_REPLACE('ABSC124DBV', '([A-Za-z])([0-9])|([0-9])([A-Za-z])', '$1$3_$2$4') AS formatted_value;

解释:正则表达式([A-Za-z])([0-9])匹配字母后跟数字的场景,([0-9])([A-Za-z])匹配数字后跟字母的场景,替换时在两类边界处插入下划线。

PostgreSQL

同样使用REGEXP_REPLACE函数,仅反向引用语法略有不同:

SELECT REGEXP_REPLACE('ABSC124DBV', '([A-Za-z])([0-9])|([0-9])([A-Za-z])', '\1\3_\2\4') AS formatted_value;

SQL Server(2017及以上版本)

SQL Server 2017开始原生支持REGEXP_REPLACE,写法如下:

SELECT REGEXP_REPLACE('ABSC124DBV', '([A-Za-z])([0-9])|([0-9])([A-Za-z])', '$1$3_$2$4') AS formatted_value;

如果是低于2017的版本,可通过自定义函数逐字符判断拼接:

CREATE FUNCTION dbo.AddUnderscores(@input VARCHAR(100))
RETURNS VARCHAR(200)
AS
BEGIN
    DECLARE @output VARCHAR(200) = '';
    DECLARE @i INT = 1;
    DECLARE @len INT = LEN(@input);
    
    WHILE @i <= @len
    BEGIN
        SET @output += SUBSTRING(@input, @i, 1);
        IF @i < @len
        BEGIN
            IF (SUBSTRING(@input, @i, 1) LIKE '[A-Za-z]' AND SUBSTRING(@input, @i+1, 1) LIKE '[0-9]')
                OR (SUBSTRING(@input, @i, 1) LIKE '[0-9]' AND SUBSTRING(@input, @i+1, 1) LIKE '[A-Za-z]')
            BEGIN
                SET @output += '_';
            END
        END
        SET @i += 1;
    END
    RETURN @output;
END;

-- 调用函数
SELECT dbo.AddUnderscores('ABSC124DBV') AS formatted_value;

Oracle

Oracle的REGEXP_REPLACE语法与PostgreSQL一致:

SELECT REGEXP_REPLACE('ABSC124DBV', '([A-Za-z])([0-9])|([0-9])([A-Za-z])', '\1\3_\2\4') AS formatted_value FROM DUAL;

以上所有方法执行后,输入ABSC124DBV都会得到目标结果ABSC_124_DBV。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:40:57