如何在varchar
列中进行排序?
例如,我有一个名为[Country]
的列,它可能包含各种国家/地区名称。
国家/地区列可能包含
"Russia, USA, France, UK, Japan, Russia, France, China".
如何在[Country]列中区分并按字母顺序对字符串进行排序?
最后,我想得到:
"China, France, Japan, Russia, UK, USA"
<国家/地区]栏中的。
答案 0 :(得分:1)
您需要使用此处的split string function之一,然后再将它们合并..
declare @string varchar(max)
set @string='Russia, USA, France, UK, Japan, Russia, France, China'
;with cte
as
(
select *
from [dbo].[SplitStrings_Numbers](@string,',')
)
select stuff( (select ',' +item
from cte
order by item
for xml path('')),1,1,'')
答案 1 :(得分:1)
正如旁注:如果@string不提供任何特殊的XML字符,那么TheGameiswar发布的内容将会很有效。如果确实如此,您需要做一个小调整。这个:
for xml path('')),1,1,'')
需要成为这个:
for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');
考虑以下查询以及我的评论:
declare @string varchar(max)
set @string='<tag3>,<tag1>,<tag2>';
-- Note the output here:
;with cte
as
(
select *
from dbo.delimitedSplit8K(@string,',')
)
select stuff( (select ',' +item
from cte
order by item
for xml path('')),1,1,'');
-- this will handle special XML characters:
WITH cte
as
(
select *
from dbo.delimitedSplit8K(@string,',')
)
select stuff( (select ',' +item
from cte
order by item
for xml path(''),TYPE).value('.', 'varchar(1000)'),1,1,'');
我所显示的更改会略微降低性能,但会正确处理特殊的XML字符。
编辑:我忘了提及 - &#34; splitter&#34;我使用的是来自这篇文章:http://www.sqlservercentral.com/articles/Tally+Table/72993/