首页 新闻 会员 周边

写个字段排序的sql函数

0
[已解决问题] 解决于 2022-09-06 20:32

我的字段内容是 用逗号分隔的 如 32,54,12

想写个函数 将字段内容按数字排序。。
请大神赐教

希望得到结果 12,32,54

select fun(col) from tab

ALTER function [dbo].[fun]
(@a varchar(200))
returns varchar(200)
as
begin
DECLARE @s VARCHAR(200)
//请大神指教
RETURN (@s)
end

五百万的主页 五百万 | 初学一级 | 园豆:33
提问于:2022-01-29 11:19
< >
分享
最佳答案
0

declare @t table(id int,c varchar(100));

insert into @t select 1,'45,32,10' union all select 2,'2,33,20'

--
;with cte as (
SELECT A.id,b.value
FROM(
    SELECT id, [value] = CONVERT(xml,'<root><v>' + REPLACE(c, ',', '</v><v>') + '</v></root>') FROM @t
)A
OUTER APPLY(
    SELECT value = N.v.value('.', 'varchar(100)') FROM A.[value].nodes('/root/v') N(v)
)B
)
select x.id, stuff((select ','+value from cte where id=x.id order by value for xml path('')),1,1,'') as c from cte x group by id

/*
1 10,32,45
2 2,20,33
*/
您字段这样存了,排不排序不重要,只要存在里在就可以了。即使你今天排了序,说不定后面再插入两个id又会乱了,其实没必要去排序。最好的存是像上面代码转成这种标准的一对多,这样怎么处理都比较容易。

奖励园豆:5
gw2010 | 小虾三级 |园豆:1487 | 2022-02-11 11:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册