9i以前不清楚,9i里面可以利用nlssort函数可以按拼音排序的功能来大概确定一个汉字的首拼音字母(不清楚系统是否还提供了其他比较直接的方法).
select * from dual
where NLSSORT('啊','NLS_SORT = SCHINESE_PINYIN_M')
<NLSSORT('擦','NLS_SORT = SCHINESE_PINYIN_M');可以自己写一个函数,用如下规则确定首拼音字母:
>=a <ba a
>=ba <ca b
>=ca <da c
>=da <e d
>=e <fa e
.....
即(var中存放了单个汉字):
if nlssort(var,'NLS_SORT = SCHINESE_PINYIN_M')< nlssort('八','NLS_SORT = SCHINESE_PINYIN_M') then
reslut:='a';
elsif nlssort(var,'NLS_SORT = SCHINESE_PINYIN_M')< nlssort('擦','NLS_SORT =
SCHINESE_PINYIN_M') then
result:= 'b';
elsif nlssort(var,'NLS_SORT = SCHINESE_PINYIN_M')< nlssort('大','NLS_SORT =
SCHINESE_PINYIN_M') then
result:= 'c';
...不过这还是不准确,因为各个同音字的nlssort函数值是不同的,例如同是a音,"阿"就排在"啊"前面,除非知道各组里面nlssort函数值最小的汉字,用它们来比较肯定应该就准确了. 仅供参考.
select * from dual
where NLSSORT('啊','NLS_SORT = SCHINESE_PINYIN_M')
<NLSSORT('擦','NLS_SORT = SCHINESE_PINYIN_M');可以自己写一个函数,用如下规则确定首拼音字母:
>=a <ba a
>=ba <ca b
>=ca <da c
>=da <e d
>=e <fa e
.....
即(var中存放了单个汉字):
if nlssort(var,'NLS_SORT = SCHINESE_PINYIN_M')< nlssort('八','NLS_SORT = SCHINESE_PINYIN_M') then
reslut:='a';
elsif nlssort(var,'NLS_SORT = SCHINESE_PINYIN_M')< nlssort('擦','NLS_SORT =
SCHINESE_PINYIN_M') then
result:= 'b';
elsif nlssort(var,'NLS_SORT = SCHINESE_PINYIN_M')< nlssort('大','NLS_SORT =
SCHINESE_PINYIN_M') then
result:= 'c';
...不过这还是不准确,因为各个同音字的nlssort函数值是不同的,例如同是a音,"阿"就排在"啊"前面,除非知道各组里面nlssort函数值最小的汉字,用它们来比较肯定应该就准确了. 仅供参考.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货