欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

oracle 按照首字母a-z排序有关问题

更新时间: 2014-01-05 02:13:17 责任编辑: Author_N1

 

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

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

汉子和英文是混着的

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

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



--参考方法--
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)也就是后面的部分尽量偏后
--参考方法--
学习了。楼上果然是神兽。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:13:17
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7167/
本文WWW.DOC100.NET DOC100.NET版权所有。