# Oracle 汉字转换首字母函数
CREATE OR REPLACE FUNCTION FNC_CWIT_GET_PYM
(iv_str IN CHAR)
RETURN VARCHAR2
IS
v_frmstr VARCHAR2(100) := '()【】:孢呋羟西漯';
v_tostr VARCHAR2(100) := '()[]:包福枪洗罗';
i_pos INTEGER;
lv_ch VARCHAR2(100);
lv_retstr VARCHAR2(1000);
BEGIN
--依次处理v_str中每个字符
FOR i IN 1..LENGTH(iv_str)
LOOP
lv_ch := SUBSTR(iv_str , i , 1);
IF ASCII(lv_ch) < 128 THEN--非汉字
lv_retstr := lv_retstr || lv_ch;
ELSE--是汉字
i_pos := INSTR(v_frmstr, lv_ch);
IF i_pos > 0 THEN
lv_ch := SUBSTR(v_tostr, i_pos, 1);
END IF;
lv_retstr := CASE lv_ch
WHEN GREATEST(lv_ch, '匝') THEN lv_retstr || 'Z'
WHEN GREATEST(lv_ch, '丫') THEN lv_retstr || 'Y'
WHEN GREATEST(lv_ch, '夕') THEN lv_retstr || 'X'
WHEN GREATEST(lv_ch, '哇') THEN lv_retstr || 'W'
WHEN GREATEST(lv_ch, '他') THEN lv_retstr || 'T'
WHEN GREATEST(lv_ch, '撒') THEN lv_retstr || 'S'
WHEN GREATEST(lv_ch, '然') THEN lv_retstr || 'R'
WHEN GREATEST(lv_ch, '七') THEN lv_retstr || 'Q'
WHEN GREATEST(lv_ch, '趴') THEN lv_retstr || 'P'
WHEN GREATEST(lv_ch, '哦') THEN lv_retstr || 'O'
WHEN GREATEST(lv_ch, '拿') THEN lv_retstr || 'N'
WHEN GREATEST(lv_ch, '妈') THEN lv_retstr || 'M'
WHEN GREATEST(lv_ch, '廓') THEN lv_retstr || 'L'
WHEN GREATEST(lv_ch, '咖') THEN lv_retstr || 'K'
WHEN GREATEST(lv_ch, '讥') THEN lv_retstr || 'J'
WHEN GREATEST(lv_ch, '哈') THEN lv_retstr || 'H'
WHEN GREATEST(lv_ch, '嘎') THEN lv_retstr || 'G'
WHEN GREATEST(lv_ch, '发') THEN lv_retstr || 'F'
WHEN GREATEST(lv_ch, '讹') THEN lv_retstr || 'E'
WHEN GREATEST(lv_ch, '搭') THEN lv_retstr || 'D'
WHEN GREATEST(lv_ch, '擦') THEN lv_retstr || 'C'
WHEN GREATEST(lv_ch, '八') THEN lv_retstr || 'B'
WHEN GREATEST(lv_ch, '阿') THEN lv_retstr || 'A'
ELSE lv_retstr || lv_ch
END;
END IF;
END LOOP;
RETURN lv_retstr;
EXCEPTION WHEN OTHERS THEN
RETURN '0';
END FNC_CWIT_GET_PYM;