Oracle 中查詢結果按照某個中文字段或者英文字母(包括 符號)排序,並不會得到我們預期的結果,因為對於中文與英文字母及符號,Oracle實際是按照其對應的ASCII碼值排序的!
可以看到按照中文村名排序並沒有按照我們預期,按照村名的拼音字段排序,也是一樣(實際是按照其對應的ASCII碼值排序)!
當然,Oracle也提供了按照中文拼音排序,按照部首或筆畫排序,方式如下:
按照拼音順序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_PINYIN_M')
按照部首順序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_RADICAL_M')
按照筆畫順序:
ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_STROKE_M')
不過,對於多音字的排序還是有問題的。。。
所以我們最后的解決方案是,存儲村名的拼音(多音字由人工識別),再按照拼音排序;其實也可以增加一個“排序值”的字段,按照1、2、3...排序。
===============================================================================================================
(不過,在 Linq to List中,按照中文排序是按照拼音來排序的,但同樣對 多音字 的識別仍然有問題。)