• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > 字符串聚合函数(去除重复值)

字符串聚合函数(去除重复值)

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了字符串,聚合函数等相关知识,希望本文的分享对您有所帮助

提供字符串的替代聚合函数

--功能:提供字符串的替代聚合函数
--说明:例如,将下列数据
--test_id test_value
--------------------
'a' '01,03,04'
'a' '02,04'
'b' '03,04,08'
'b' '06,08,09'
'c' '09'
'c' '10'
--转换成test_vlaue列聚合后的函数,且聚合后的字符串中的值不重复

--test_id test_value
--------------------
'a' '01,03,04,02'
'b' '03,04,08,06,09'
'c' '09,10'

--代码-------------------------------------------GO
GO
if object_id(N'dbo.merge',N'FN') is not null
drop function dbo.merge
GO
--函数功能:字符串聚合及去除重复值
create function dbo.merge
(
@test_id varchar(50)
)
returns varchar(50)
as
begin
--字符串聚合-------------------------START
declare @s varchar(8000)
set @s = ''

select
@s = @s + test_value + ','
from test_a
where test_id = @test_id
--字符串聚合-------------------------END

--去除重复值-------------------------START
declare @value varchar(8000)--存储第一个逗号前的值
declare @result varchar(8000)--存储唯一值的中间字符串
set @result = ''

--有值的场合
while charindex(',',@s) <> 0
begin
--取第一个逗号前的值
set @value = left(@s,charindex(',',@s) -1)

--第一个逗号前的值没在结果中出现
if charindex(',' + @value + ',',',' + @result) = 0
begin
--加入中间字符串
set @result = @result + @value + ','
end

--去除第一个值以及后面的逗号(剔除法),继续循环判断
set @s = right(@s,(len(@s) - charindex(',',@s)))
end

set @s = @result
--去除重复值-------------------------END

return left(@s,len(@s)-1)
end
GO

if object_id(N'test_a',N'U') is not null
drop table test_a
GO

create table test_a
(
test_id varchar(50),
test_value varchar(50)
)

insert into test_a
select 'a','01,03,04' union all
select 'a','02,04' union all
select 'b','03,04,08' union all
select 'b','06,08,09' union all
select 'c','09' union all
select 'c','10'

select
test_id,
test_value = dbo.merge(test_id)
from test_a
group by test_id
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • mysql整数数据类型深入解析
  • SQL字符串以及数字常用操作汇总
  • MySQL笔记之字符串函数的应用
  • 使用java处理字符串公式运算的方法
  • MySQL慢查询查找和调优测试
  • mysql截取函数常用方法使用说明
  • MySQL里实现类似SPLIT的分割字符串的函数
  • mysql查询字符串替换语句小结(数据库字符串替换)
  • mysql中取字符串中的数字的语句
  • MySQL的字符串函数使用说明

相关文章

  • 2018-12-05MySQL触发器之创建触发器
  • 2017-05-11MySQL基本命令、常用命令总结
  • 2018-12-05Access数据库的存储空间最大是多少
  • 2018-12-05分享整理的12条sql语句连同数据
  • 2018-12-05MySQL学习笔记4:完整性约束限制字段
  • 2017-05-11查看MySQL的错误日志的方法
  • 2017-05-11MYSQL主从库不同步故障一例解决方法
  • 2018-12-05MySQL 利用binlog增量备份+还原实例
  • 2017-05-113步搞定纯真IP数据导入到MySQL的方法详解
  • 2018-12-05sqlserver中在指定数据库的所有表的所有列中搜索给定的值

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 关于mysql exists与not exists分析
    • 在MySQL中使用序列的简单教程
    • Oracle也有注入漏洞
    • 数据库清除日志文件(LDF文件过大)
    • 把SQL数据库部署到远程数据库服务器中
    • MSSQL 数据库备份和还原的几种方法 图文教程
    • MySQL数据库的还原与恢复以及导入操作
    • MySQL数据库备份和还原的常用命令小结
    • SQL 比较一个集合是否在另一个集合里存在的方法分享
    • 列出SQL Server中具有默认值的所有字段的语句

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有