我相信這肯定是一個很常見的問題,所以我猜測微軟已經解決了這個問題。我的谷歌搜索技能只是沒有達到劃痕。我有要訂購由一個字段,它是一個varchar字段,例如如何在可以按字母順序包含數字的varchar字段上進行排序?
- Q
- 貨號10
- 貨號1
- 甲
- 貨號9
- 貨號2
- F
現在我期待結果是
- 甲
- ˚F
- 貨號1
- 貨號2
- 貨號9
- 貨號10
- Q
但是事實並非如此。它是如下(請注意,貨號10來貨號1且不貨號9如預期之後)
- 甲
- ˚F
- 貨號1
- 貨號10
- 貨號2
- 貨號9
- Q
現在我知道原因了爲此,你不需要解釋:)但我不記得如何解決它,或者如果有一個漂亮的標誌或命令,我可以用它來正確的。
編輯:
上面的例子只是一個例子。該列可以包含任何值。字母和數字的任意組合。有沒有辦法按字母順序排序,而不是按字母順序排序的ASCII值?
編輯2: 感謝迄今爲止的答案。我正在談論任何一個任意的數據。如果它是在一個固定的位置或者在某個東西之前,那麼它很容易,我不會問。我要求用任何任意的數據來解決這個問題。不是模式,沒有規則,沒有任何東西。
數字值總是以文本「Num」開頭嗎? – 2010-01-12 20:34:18
重新編輯2:在某些情況下可以使用一般解決方案,但我沒有對*自然排序*的嚴格定義。你如何期待它的表現?提供更復雜的用例將有很大幫助。我已經寫了一個CLR函數,它似乎適用於**我**的需求,請參閱下面的編輯。 – RedFilter 2010-01-14 12:35:38
@OrbMan。我真的希望像SELECT * FROM x ORDER BY(NaturalIndex(col))或類似的東西。我想可能這個問題已經被SQL Server解決了,我只是沒有意識到這個功能。我將通過C#中的解決方案實現,使用Yada發佈的鏈接。不管怎麼說,還是要謝謝你。 – uriDium 2010-01-14 13:21:14