2011-07-01 81 views
0

我有一個列表Name NVARCHAR(100)列表。排序在SQL Server 2008中具有特殊字符的列

該表中的數據是這樣的:

Wang 
Bergeron 
Zhang 
Sorrentino 
Mazumdar 
Boggs 
Fricker 
Barkwell 
Atkinson 
Mah 
Test CB1 C1*(
--Test Contact-- 
--TEST CONTACT-- 
--ABC CONTACT-- 
Retest Contact 
Janzen 
Seto 
Boggs 
Fricker 
Barkwell 

和我期待的結果,像

--ABC CONTACT-- 
--Test Contact-- 
--TEST CONTACT-- 
Atkinson 
Barkwell 
Barkwell 
Bergeron 
Boggs 
Boggs 
Fricker 
Fricker 
Janzen 
Mah 
Mazumdar 
Retest Contact 
Seto 
Sorrentino 
Test CB1 C1*(
Wang 
Zhang 

請求您的支持來重新解決這個排序

+0

你想重新排列字符串列中的單詞嗎?他們需要在數據庫中進行修復還是需要使用代碼? --edit--在Tim的編輯之後,這個問題變得更有意義。 – asawyer

+2

你嘗試過ORDER BY NAME嗎? – heximal

+0

@heximal:'ORDER BY NAME'不會給出想要的結果,但:'1 .-- ABC CONTACT--,......,17 .--測試接觸點 - ,18 .--測試接點 - ...'。 OP希望所有名稱都以'-'開頭,然後按字母順序排列。看看[我的示例數據](http://stackoverflow.com/questions/6548481/sorting-a-column-having-special-charaters-in-sql-server-2008/6548637#6548637)。 –

回答

1

可能在訂單條款中有一個case語句:

SELECT * 
FROM myTable 
ORDER BY CASE WHEN Name LIKE '-%' THEN 1 ELSE 0 END DESC, 
     Name ASC 
2

您可以在您的Order By中使用Case-Statement

declare @temp table(
    Name varchar(100) 
) 
insert into @temp 
    SELECT * FROM (SELECT 'Wang' UNION ALL SELECT 'Bergeron' UNION ALL SELECT 'Zhang' UNION ALL SELECT 'Sorrentino' UNION ALL SELECT 'Mazumdar' UNION ALL SELECT 'Boggs' UNION ALL SELECT 'Fricker' UNION ALL SELECT 'Barkwell' UNION ALL SELECT 'Atkinson' UNION ALL SELECT 'Mah' UNION ALL SELECT 'Test CB1 C1*(' UNION ALL SELECT '--Test Contact--' UNION ALL SELECT '--TEST CONTACT--' UNION ALL SELECT '--ABC CONTACT--' UNION ALL SELECT 'Retest Contact' UNION ALL SELECT 'Janzen' UNION ALL SELECT 'Seto' UNION ALL SELECT 'Boggs' UNION ALL SELECT 'Fricker' UNION ALL SELECT 'Barkwell')AS T(Spalte); 

select * from @temp 
    ORDER BY (CASE WHEN [Name] LIKE '-%' THEN 0 ELSE 1 END), [Name]