create or replace function get_chinese(v_name in varchar2) return integer is
i int;
v_count integer;
v_code varchar2(10);
begin
v_count := 0;
/**
作者:背包去流浪
QQ:380140243
用途: 返回字符串中汉字的个数
原理说明: 因为汉字的ASCII码值在4E00和9FA5之间,所以,可以将字符串转为ASCII后,判断连续的5位是否在这个范围,
是则为汉字,否则为其他字符。
返回值: 汉字个数
异常返回: -1
*/
for i in 1 .. lengthb(asciistr(v_name)) - 4 loop
--if substr(asciistr(v_name),i,1)='\' then --有\则判断是否汉字
v_code := substr(asciistr(v_name), i, 5);
IF V_CODE BETWEEN '\4E00' AND '\9FA5' THEN
--汉字的asciid码值范围
v_count := v_count + 1; --有一个汉字
end if;
-- dbms_output.put_line(v_code);
-- end if;
end loop;
return v_count;
exception
when others then
return - 1; --异常返回-1
end get_chinese;