CREATE OR REPLACE FUNCTION PUB_GET_PY(p_汉字 CHAR DEFAULT '%')
RETURN CHAR
IS v_汉字内码 NUMBER(8);
v_拼音 CHAR(1);
BEGIN
v_汉字内码 := ASCII(p_汉字);
IF v_汉字内码 BETWEEN 45217 AND 45252 THEN
v_拼音 := 'A';
ELSIF v_汉字内码 BETWEEN 45253 AND 45760 THEN
v_拼音 := 'B';
ELSIF v_汉字内码 BETWEEN 45761 AND 46317 THEN
v_拼音 := 'C';
ELSIF v_汉字内码 BETWEEN 46318 AND 46825 THEN
v_拼音 := 'D';
ELSIF v_汉字内码 BETWEEN 46826 AND 47009 THEN
v_拼音 := 'E';
ELSIF v_汉字内码 BETWEEN 47010 AND 47296 THEN
v_拼音 := 'F';
ELSIF v_汉字内码 BETWEEN 47297 AND 47613 THEN
v_拼音 := 'G';
ELSIF v_汉字内码 BETWEEN 47614 AND 48116 THEN
v_拼音 := 'H';
ELSIF v_汉字内码 BETWEEN 48117 AND 49061 THEN
v_拼音 := 'J';
ELSIF v_汉字内码 BETWEEN 49062 AND 49323 THEN
v_拼音 := 'K';
ELSIF v_汉字内码 BETWEEN 49324 AND 49895 THEN
v_拼音 := 'L';
ELSIF v_汉字内码 BETWEEN 49896 AND 50370 THEN
v_拼音 := 'M';
ELSIF v_汉字内码 BETWEEN 50371 AND 50613 THEN
v_拼音 := 'N';
ELSIF v_汉字内码 BETWEEN 50614 AND 50621 THEN
v_拼音 := 'O';
ELSIF v_汉字内码 BETWEEN 50622 AND 50925 THEN
v_拼音 := 'P';
ELSIF v_汉字内码 BETWEEN 50926 AND 51386 THEN
v_拼音 := 'Q';
ELSIF v_汉字内码 BETWEEN 51387 AND 51445 THEN
v_拼音 := 'R';
ELSIF v_汉字内码 BETWEEN 51446 AND 52217 THEN
v_拼音 := 'S';
ELSIF v_汉字内码 BETWEEN 52218 AND 52697 THEN
v_拼音 := 'T';
ELSIF v_汉字内码 BETWEEN 52698 AND 52979 THEN
v_拼音 := 'W';
ELSIF v_汉字内码 BETWEEN 52980 AND 53640 THEN
v_拼音 := 'X';
ELSIF v_汉字内码 BETWEEN 53641 AND 54480 THEN
v_拼音 := 'Y';
ELSIF v_汉字内码 BETWEEN 54481 AND 55289 THEN
v_拼音 := 'Z';
ELSE
v_拼音 := NULL;
END IF;
RETURN v_拼音;
END PUB_GET_PY;这只能列出常用的
但是还有很多的函数不能检索比如 浜 漕 等等也就是说55289之后的 都不能检索出来谁能提供一份不常用的 汉字区间比如说
SQL> select ascii('浜') from dual;ASCII('浜')
-----------
58554
SQL> select ascii('漕') from dual;ASCII('漕')
-----------
58606
这58554之间58606就不常用的以B开头的汉字不知道我说清楚没?
RETURN CHAR
IS v_汉字内码 NUMBER(8);
v_拼音 CHAR(1);
BEGIN
v_汉字内码 := ASCII(p_汉字);
IF v_汉字内码 BETWEEN 45217 AND 45252 THEN
v_拼音 := 'A';
ELSIF v_汉字内码 BETWEEN 45253 AND 45760 THEN
v_拼音 := 'B';
ELSIF v_汉字内码 BETWEEN 45761 AND 46317 THEN
v_拼音 := 'C';
ELSIF v_汉字内码 BETWEEN 46318 AND 46825 THEN
v_拼音 := 'D';
ELSIF v_汉字内码 BETWEEN 46826 AND 47009 THEN
v_拼音 := 'E';
ELSIF v_汉字内码 BETWEEN 47010 AND 47296 THEN
v_拼音 := 'F';
ELSIF v_汉字内码 BETWEEN 47297 AND 47613 THEN
v_拼音 := 'G';
ELSIF v_汉字内码 BETWEEN 47614 AND 48116 THEN
v_拼音 := 'H';
ELSIF v_汉字内码 BETWEEN 48117 AND 49061 THEN
v_拼音 := 'J';
ELSIF v_汉字内码 BETWEEN 49062 AND 49323 THEN
v_拼音 := 'K';
ELSIF v_汉字内码 BETWEEN 49324 AND 49895 THEN
v_拼音 := 'L';
ELSIF v_汉字内码 BETWEEN 49896 AND 50370 THEN
v_拼音 := 'M';
ELSIF v_汉字内码 BETWEEN 50371 AND 50613 THEN
v_拼音 := 'N';
ELSIF v_汉字内码 BETWEEN 50614 AND 50621 THEN
v_拼音 := 'O';
ELSIF v_汉字内码 BETWEEN 50622 AND 50925 THEN
v_拼音 := 'P';
ELSIF v_汉字内码 BETWEEN 50926 AND 51386 THEN
v_拼音 := 'Q';
ELSIF v_汉字内码 BETWEEN 51387 AND 51445 THEN
v_拼音 := 'R';
ELSIF v_汉字内码 BETWEEN 51446 AND 52217 THEN
v_拼音 := 'S';
ELSIF v_汉字内码 BETWEEN 52218 AND 52697 THEN
v_拼音 := 'T';
ELSIF v_汉字内码 BETWEEN 52698 AND 52979 THEN
v_拼音 := 'W';
ELSIF v_汉字内码 BETWEEN 52980 AND 53640 THEN
v_拼音 := 'X';
ELSIF v_汉字内码 BETWEEN 53641 AND 54480 THEN
v_拼音 := 'Y';
ELSIF v_汉字内码 BETWEEN 54481 AND 55289 THEN
v_拼音 := 'Z';
ELSE
v_拼音 := NULL;
END IF;
RETURN v_拼音;
END PUB_GET_PY;这只能列出常用的
但是还有很多的函数不能检索比如 浜 漕 等等也就是说55289之后的 都不能检索出来谁能提供一份不常用的 汉字区间比如说
SQL> select ascii('浜') from dual;ASCII('浜')
-----------
58554
SQL> select ascii('漕') from dual;ASCII('漕')
-----------
58606
这58554之间58606就不常用的以B开头的汉字不知道我说清楚没?
解决方案 »
- SQL语句参数化问题
- oracle用浏览器打不开,命令行里打得开??
- 看似简单,却又复杂的CONVERT问题 (Oracle 10g)
- 我安装完oracle10g之后,为什么没有em企业管理器啊?该在那个目录怎么打开呢?
- 关于数据类型转换
- Oracle9i里面,如何做按照时间来执行查询的功能?
- 求教:SQL语句怎么写??
- ORACLE数据库一大难题
- 如何根据主外键关系,自动生成查询SQL语句
- oracle数据导入的时候修改了表结构和视图,后来插入了表数据,做了备份。现有一个备份是插入数据之前做的,表结构和视图都没问题。怎么把此数据库修复?
- TNS: 没有监听程序,求高手帮助
- 有没有方法查看--对某个用户下的表做过哪些操作
网上找个对照表就行了
2楼
我都列出常用的对照表了举以B开头的
45253
45760 之间是连续的
在这范围之外的ASCII 不是都连续的而且 跳号中 都不是以B开头的这样的话 我 拼音检索的时候 输入B不是 把 D开头的或其他的也列出来了么???