首页 > 数据库 > SQL > 正文

SQL 字符串函数如何去掉重复字符?

舞夢輝影
发布: 2025-10-07 20:05:01
原创
615人浏览过
答案:SQL中无内置去重字符函数,但可通过递归CTE、正则拆分或自定义函数实现,如SQL Server用递归或函数逐字符处理,PostgreSQL可用regexp_split_to_array配合string_agg去重合并,最终返回不重复字符结果。

sql 字符串函数如何去掉重复字符?

在 SQL 中,没有内置的直接函数可以去掉字符串中的重复字符,但可以通过组合使用现有字符串函数和逻辑处理来实现。不同数据库(如 MySQL、SQL Server、PostgreSQL)支持的方法略有不同。以下是几种常见思路和示例。

1. 使用递归 CTE 拆分并去重字符(适用于 SQL Server、PostgreSQL)

将字符串拆成单个字符,去除重复字符后再拼接回来。

  • 先用递归 CTE 或生成器将字符串逐字符拆开
  • 使用 DISTINCT 去除重复字符
  • 按原顺序(或任意顺序)重新组合

示例(SQL Server):

WITH Characters AS (
    SELECT 
        SUBSTRING('aabbcc', 1, 1) AS ch,
        1 AS pos
    UNION ALL
    SELECT 
        SUBSTRING('aabbcc', pos + 1, 1),
        pos + 1
    FROM Characters
    WHERE pos < LEN('aabbcc')
)
SELECT STRING_AGG(ch, '') AS unique_string
FROM (
    SELECT DISTINCT ch
    FROM Characters
) t;
登录后复制

结果:abc

怪兽AI数字人
怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

怪兽AI数字人 44
查看详情 怪兽AI数字人

2. 使用正则表达式(适用于 PostgreSQL、MySQL 8.0+)

虽然正则不能直接“去重”,但可配合其他函数使用。PostgreSQL 支持更强的正则功能。

PostgreSQL 示例(使用 regexp_split_to_table):

SELECT string_agg(DISTINCT letter, '' ORDER BY letter)
FROM (
    SELECT unnest(regexp_split_to_array('aabbcc', '')) AS letter
) t
WHERE letter != '';
登录后复制

结果:abc

3. 创建自定义函数(通用方法)

如果你经常需要这个功能,可以创建一个用户定义函数。

SQL Server 自定义函数示例:

CREATE FUNCTION dbo.RemoveDuplicateChars(@input NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @result NVARCHAR(MAX) = '';
    DECLARE @i INT = 1;
    DECLARE @ch NCHAR(1);
<pre class='brush:php;toolbar:false;'>WHILE @i <= LEN(@input)
BEGIN
    SET @ch = SUBSTRING(@input, @i, 1);
    IF CHARINDEX(@ch, @result) = 0
        SET @result = @result + @ch;
    SET @i += 1;
END

RETURN @result;
登录后复制

END;

使用方式:

SELECT dbo.RemoveDuplicateChars('aabbcc'); -- 返回 abc
登录后复制

4. 注意事项

这类操作通常用于清洗数据或特殊场景,性能可能较差,尤其是长字符串或多行处理时。建议:

  • 避免在大表上对每行执行复杂字符串操作
  • 考虑在应用层处理更高效
  • 注意字符大小写是否区分(如 'A' 和 'a')

基本上就这些方法。SQL 标准不提供直接去重字符的函数,需手动实现逻辑。根据你使用的数据库选择合适方案。

以上就是SQL 字符串函数如何去掉重复字符?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号