2010-11-30 27 views
1

使用LINQ或SQL,我怎么可能有下列字符串,通常分类为:从第一个字母开始,而不是第一个字符开始排序varchar列?

“香蕉” 苹果 椰子

排序为:

苹果 “香蕉” 椰子

+0

嗯,你问SQL或LINQ忽略领先的特殊字符,所以你需要某种形式的正则表达式,并您最终可能会将表加载到内存中以清理数据。这听起来很危险。 – 2010-11-30 21:31:51

回答

0

根据你的评论更新

IList<string> sorted = context.Terms.ToList() 
    .OrderBy(t => Regex.Replace(t.Term, @"\W*","")).ToList(); 
+0

我喜欢你的想法,但我不确定如何继续。我将如何将您的建议应用于以下内容:var query = from context term.Terms order by term.Term select term; – mattucg 2010-11-30 22:35:07

+0

更新了我的回答 – hunter 2010-12-01 06:35:41

0

在SQL上,您可以对它进行排序而不需要REGEX函数本身,您可以使用PATINDEX。试试这个:

SELECT * 
FROM Table 
ORDER BY RIGHT(Column,LEN(Column)-patindex('%[a-zA-Z]%',Column)+1) 

这样,你正在使用的列的第一个字母排序表,忽略了其他字符

0

您可以添加包含只是字母数字字符串,一列,然后排序这一点。

找到的函数RemoveNonAlphaCharacters here将允许您筛选出非字母数字字符。如果表是非常小的,性能是没有问题的,你可以简单地

ORDER BY RemoveNonAlphaCharacters(columnToClean) 
相关问题