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

2016-02-19 11:09 8 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的字符串聚合函数(去除重复值),希望大家看完后能赶快学习起来。

【 tulaoshi.com - 编程语言 】

--功能:提供字符串的替代聚合函数
--说明:例如,将下列数据
--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

来源:http://www.tulaoshi.com/n/20160219/1596650.html

延伸阅读
VB官方文档似乎很鼓励使用"无$"类字符串函数,比如:Left、LTrim或者UCase,而不是实现同样功能的Left$、LTrim$和UCase$函数。但是我们必须认识到:前者返回variant类型的数值,当用于字符串表达式中时,最终必须要转换为字符串(string)类型。 因此,在严格要求时间的代码段中,我们应该使用后者,它们将快5-10。 ->
标签: Web开发
比如 1223445677777778aabbcccccccccc 经过过滤之后就是12345678abc 代码如下: %     '过滤重复    Function norepeat(Str)     Dim RegEx     If IsNull(Str) Or Str="" Then Exit Function  ...
对于针对字符串位置的操作,第一个位置被标记为1。 ASCII(str) 返回字符串 str 的 最左面字符的ASCII代码值。 如果 str 是空字符串, 返回 0 。如果 str 是 NULL ,返回 NULL 。 mysql select ASCII('2'); - 50 mysql select ASCII(2); - 50 mysql select ASCII('dx'); - 100 也可参见ORD()函数。 ORD(str) 如果字符串str最左面字...
根据,MySQL 会自动将数字转化为字符串,反之亦然。 mysql SELECT 1+'1'; - 2 mysql SELECT CONCAT(2,' test'); - '2 test' 若想要将数字明确地转化为字符串,可使用 CAST()或 CONCAT()函数: mysql SELECT 38.8, CAST(38.8 AS CHAR); - 38.8, '38.8' mysql SELECT 38.8, CONCAT...
标签: ASP
1. 字符串函数: Len(str):取得字符串的长度 Instr(str1,str2):从字符串str1,寻找另一个字符串str2第一个出现的位置 Left(str,n):从字符串str左起取n个字符 Right(str,n):从字符串str右起取n个字符 Mid(str1,n1,n2):从字符串第n1个字符开始,取出n2个字符。 2.字符串函数应用: 1)通过字符函数设计出一个字符串长度控制函数: 防止超过行宽字符...

经验教程

760

收藏

72
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部