CREATE OR REPLACE FUNCTION F_GET_PYBM (v_name IN VARCHAR2) RETURN VARCHAR2 AS
/*******************************************************************
模块名称:获取汉字首字母拼音
模块编号:
功 能:
*********************************************************************
备注: 此函数根据网络找的一个函数改造而成,此函数的原理是使用oracle
自带的汉字排序规则,根据拼音得到固定值
例如以f开头的拼音那么肯定 是 >=fa and <=jì
那么就有
IF nb_compare >=nlssort( '发', 'NLS_SORT=SCHINESE_PINYIN_M') AND nb_compare <= nlssort( '猤', 'NLS_SORT=SCHINESE_PINYIN_M') THEN
nb_return := nb_return || 'F';
如果测试部分汉字的拼音不正确,可以根据实际情况调整左右边界值
如果涉及到其它字符集的时候,可以将使用下列语句得到每个拼音的最大和最小边界
select pybm,max(nlssort(hzbm, 'NLS_SORT=SCHINESE_PINYIN_M')),min(nlssort(hzbm, 'NLS_SORT=SCHINESE_PINYIN_M'))
from t_pybmk2 a
group by pybm
这里要注意多音
结果集说明:
修改历史: 删除原来的从表中获取的模式 修改后以 f_Get_pybm('瞿得光') 测试耗时为原来0.1倍
********************************************************************/
nb_compare VARCHAR2(100);
nb_return VARCHAR2(100);
BEGIN
FOR i IN 1 .. length(v_name) LOOP