Oracle的order by的中文排序問題


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中,按照中文排序是按照拼音來排序的,但同樣對 多音字 的識別仍然有問題。)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM