日期:2014-05-17  浏览次数:21129 次

oracle 按照首字母A-Z排序问题
求一个

根据汉子繁体字和英文字母 的首字母按照A-Z的顺序排序

汉子和英文是混着的

汉字是根据拼音首字母
英文是按照首字母

他们要一起按照A-Z排序


oracle

------解决方案--------------------
oracle针对中文有几种排序方式
NLS_SORT=SCHINESE_RADICAL_M  按照部首排序
NLS_SORT=SCHINESE_STROKE_M 按照笔画排序
NLS_SORT=SCHINESE_PINYIN_M 按照拼音排序 

既然不能将中文转换成英文 那可以将英文的首个字母 转换成对应的中文 再通过给出的中文函数来排序


with t1 as
(
     select '我' c1 from dual union all
     select '你' c1 from dual union all
     select 'what' c1 from dual union all
     select '啊' c1 from dual union all
     select 'this' c1 from dual  union all
     select 'b' c1 from dual union all
     select 'f' c1 from dual
)

select c1 
from t1
order by  nlssort(translate(lower(c1),'abcdefghjklmnopqrstwxyz','啊八嚓大额发噶哈几卡拉吗呐哦扒七然仨他哇西呀杂'),'NLS_SORT=SCHINESE_PINYIN_M')

     c1
------------------
1 啊
2 b
3 f
4 你
5 this
6 what
7 我


------解决方案--------------------
LS     正解
------解决方案--------------------
都是中文的话 直接排序:
select * from t1 order by nlssort(c1,'NLS_SORT=SCHINESE_PINYIN_M');

上面的排序可以根据自己需求变动 如果想让中文排在前面 那可以将英文首字母 替换成中文尽量偏后的

比如: bus 不要

想让英文排在前面 可以将bus替换成吧、八之类的 也就是拼音为ba 

如果要排在后面 可以替换成簿、布(bu)也就是后面的部分尽量偏后
------解决方案--------------------
学习了。楼上果然是神兽。