如何在varchar
列中排序?SQL Server在一列中對逗號分隔的字符串進行排序
如我有一個名爲[Country]
的專欄,它可能包含各種國名。
國家列可能包含
"Russia, USA, France, UK, Japan, Russia, France, China".
我如何不同[國家]列內按字母順序排序的字符串?
最後,我想:
"China, France, Japan, Russia, UK, USA"
在[國家]列
。
如何在varchar
列中排序?SQL Server在一列中對逗號分隔的字符串進行排序
如我有一個名爲[Country]
的專欄,它可能包含各種國名。
國家列可能包含
"Russia, USA, France, UK, Japan, Russia, France, China".
我如何不同[國家]列內按字母順序排序的字符串?
最後,我想:
"China, France, Japan, Russia, UK, USA"
在[國家]列
。
:如果提供了什麼TheGameiswar發佈將工作得很清楚,@string不要」 t支持任何特殊的XML字符。如果是這樣,你需要做一個小調整。這:
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字符。
編輯:我忘了mention-了「分流」我現在用的就是從這篇文章:http://www.sqlservercentral.com/articles/Tally+Table/72993/
delimitedSplit8K? –
我的壞!我忘了提及,我在這裏使用的「splitter」功能是Jeff Moden的DelimitedSplit8K:http://www.sqlservercentral.com/articles/Tally+Table/72993/ –
我喜歡這個答案。謝謝。我需要在查詢中添加不同的內容。 –
您將需要使用split string function S的一個從這裏,然後再結合他們..正如一個側面說明
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,'')
對付絕對的最佳方法是停止餡多個值到一個單一的元組。這違反了1NF,導致難以置信的痛苦。 –