2010-11-30 58 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) 
相關問題