我的字段内容是 用逗号分隔的 如 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
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又会乱了,其实没必要去排序。最好的存是像上面代码转成这种标准的一对多,这样怎么处理都比较容易。