oracle中文到拼音转换
项目有一个需求需要将姓名转换成拼音。一时间不知道从何下手。就弄了一个汉字拼音表然后写了函数。先建表其实这个表只需要汉字和拼音两个字段多出的字段是因为我找到的汉字库数据包含了这些个字段为了方便把数据弄到数据库就按照原来的汉字库表的结构建的表。create table SITE_PY ( HZ NVARCHAR2(1), PY NVARCHAR2(20), SM NVARCHAR2(20), YM NVARCHAR2(20), UNICODE NVARCHAR2(6), SD NUMBER(1), ID NUMBER(20) ); -- Add comments to the columns comment on column SITE_PY.HZ is 汉字; comment on column SITE_PY.PY is 拼音; comment on column SITE_PY.SM is 声母; comment on column SITE_PY.YM is 韵母; comment on column SITE_PY.UNICODE is 代码; comment on column SITE_PY.SD is 音调; comment on column SITE_PY.ID is 序号; -- Create/Recreate indexes create index SITE_PY on SITE_PY (HZ) pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K minextents 1 maxextents unlimited );然后导入汉字拼音对应表。字库这里可以使用多种方式1、纯文本文件用制表符分隔的方式存储数据适合于在PL/SQL等数据库环境中使用。下载地址https://download.csdn.net/download/qq_36815190/930693722、sql文件直接可以执行的sql文件。下载地址https://download.csdn.net/download/qq_36815190/930693803、exel文件下载地址https://download.csdn.net/download/qq_36815190/93069376创建函数这里有个小插曲就是字符类型的问题最终还是让ai帮我写的字库表里是nvarchar我的业务表都是varchar的。--创建函数 CREATE OR REPLACE FUNCTION f_hanzi_to_pinyin(p_name IN VARCHAR2) RETURN VARCHAR2 IS v_result VARCHAR2(4000) : ; v_py NVARCHAR2(20); v_char NVARCHAR2(2); v_half VARCHAR2(2); -- 半角字符 BEGIN IF p_name IS NULL THEN RETURN NULL; END IF; FOR i IN 1 .. LENGTH(p_name) LOOP v_char : SUBSTR(p_name, i, 1); -- 全角字母转半角关键 IF v_char AND v_char THEN v_half : CHR(ASCII(v_char) - 65248); ELSIF v_char AND v_char THEN v_half : CHR(ASCII(v_char) - 65248); ELSE v_half : v_char; END IF; BEGIN SELECT MAX(PY) INTO v_py FROM SITE_PY WHERE HZ v_half; -- 用转换后的半角字符去查 v_result : v_result || v_py; EXCEPTION WHEN NO_DATA_FOUND OR TOO_MANY_ROWS THEN v_result : v_result || v_half; END; END LOOP; RETURN v_result; END; /完成了之后就是测试。--测试 SELECT f_hanzi_to_pinyin(杨洋) FROM dual; SELECT f_hanzi_to_pinyin(xingming) FROM gy_brxx ;