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开头的汉字不知道我说清楚没?

解决方案 »

  1.   

    多音字也可以啊  又不是不支持  汉字输入
    网上找个对照表就行了
    2楼
    我都列出常用的对照表了举以B开头的
    45253
    45760 之间是连续的
    在这范围之外的ASCII 不是都连续的而且 跳号中 都不是以B开头的这样的话 我 拼音检索的时候        输入B不是 把 D开头的或其他的也列出来了么???
      

  2.   

    对照表你知道不,就是建一个表,两个字段,一个存汉字,一个存拼音首字母,网上能找到的。有了这个表还怕不会写sql语句?