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函数值最小的汉字,用它们来比较肯定应该就准确了.  仅供参考.