2011-07-01 88 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]