zoukankan      html  css  js  c++  java
  • Oracle存储过程汉字转拼音简码支持两种字符集[精][转载]

    根据姓名获得该姓名的拼音简码,如姓名为刘红,根据该函数获得的拼音为lh,该函数主要用户在查询时,可根据姓名的拼写简码进行查询 

    数据库字符集为GBK: 

    Java代码  收藏代码
    1. create or replace  
    2. function PY (P1 VARCHAR2,P2 INT default 0return VARCHAR2 as  
    3.        CHAR1 VARCHAR2(2);  
    4.        CHAR2 VARCHAR2(2);  
    5.        LEN INTEGER;  
    6.        N1 INTEGER;  
    7.        N2 INTEGER;  
    8.        CSOUND VARCHAR2(32767);  
    9.   
    10.    BEGIN  
    11.        IF P2 = 1 THEN  
    12.            LEN := 1;  
    13.        ELSE  
    14.            LEN := LENGTH(P1);  
    15.        END IF;  
    16.   
    17.   
    18.        FOR I IN 1..LEN LOOP  
    19.            CHAR2 := SUBSTR(P1, i, 1);  
    20.            N1 := FLOOR(ASCII(CHAR2) / 256);  
    21.            N2 := MOD(ASCII(CHAR2), 256);  
    22.   
    23.   
    24.            IF N1 = 0 AND N2 <= 129 THEN  
    25.                CHAR1 := CHAR2;  
    26.            ELSIF N2 <> 127 AND N2 <> 255 AND NOT (N2 >= 0 AND N2 <= 63) THEN  
    27.                SELECT  
    28.                    CASE  
    29.                       WHEN CHAR2 >= '丂' AND CHAR2 < '芭' THEN 'A'  
    30.                     WHEN CHAR2 >= '芭' AND CHAR2 < '擦' THEN 'B'  
    31.                       WHEN CHAR2 >= '擦' AND CHAR2 < '搭' THEN 'C'  
    32.                       WHEN CHAR2 >= '搭' AND CHAR2 < '蛾' THEN 'D'  
    33.                       WHEN CHAR2 >= '蛾' AND CHAR2 < '发' THEN 'E'  
    34.                       WHEN CHAR2 >= '发' AND CHAR2 < '噶' THEN 'F'  
    35.                       WHEN CHAR2 >= '噶' AND CHAR2 < '哈' THEN 'G'  
    36.                       WHEN CHAR2 >= '哈' AND CHAR2 < '击' THEN 'H'  
    37.                       WHEN CHAR2 >= '击' AND CHAR2 < '喀' THEN 'J'  
    38.                       WHEN CHAR2 >= '喀' AND CHAR2 < '垃' THEN 'K'  
    39.                       WHEN CHAR2 >= '垃' AND CHAR2 < '妈' THEN 'L'  
    40.                       WHEN CHAR2 >= '妈' AND CHAR2 < '拿' THEN 'M'  
    41.                       WHEN CHAR2 >= '拿' AND CHAR2 < '哦' THEN 'N'  
    42.                       WHEN CHAR2 >= '哦' AND CHAR2 < '啪' THEN 'O'  
    43.                       WHEN CHAR2 >= '啪' AND CHAR2 < '期' THEN 'P'  
    44.                       WHEN CHAR2 >= '期' AND CHAR2 < '然' THEN 'Q'  
    45.                       WHEN CHAR2 >= '然' AND CHAR2 < '撒' THEN 'R'  
    46.                       WHEN CHAR2 >= '撒' AND CHAR2 < '塌' THEN 'S'  
    47.                       WHEN CHAR2 >= '塌' AND CHAR2 < '挖' THEN 'T'  
    48.                       WHEN CHAR2 >= '挖' AND CHAR2 < '稀' THEN 'W'  
    49.                       WHEN CHAR2 >= '稀' AND CHAR2 < '压' THEN 'X'  
    50.                       WHEN CHAR2 >= '压' AND CHAR2 < '匝' THEN 'Y'  
    51.                       WHEN CHAR2 >= '匝' AND CHAR2 <= '鼱' THEN 'Z'  
    52.                    END  
    53.                    INTO CHAR1  
    54.                FROM DUAL;  
    55.            ELSE  
    56.                CHAR1 := 'ER';  
    57.            END IF;  
    58.   
    59.   
    60.            CSOUND := CSOUND || CHAR1;  
    61.        END LOOP;  
    62.   
    63.   
    64.        RETURN CSOUND;  
    65.    END;  

    如果数据库字符集为UTF-8,则函数如下: 
    Java代码  收藏代码
    1. create or replace  
    2. FUNCTION GETCH2SPELL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS  
    3.        V_COMPARE VARCHAR2(100);  
    4.        V_RETURN VARCHAR2(4000);  
    5.        CHAR1 VARCHAR2(3);  
    6.        CHAR2 VARCHAR2(3);  
    7.        LEN INTEGER;  
    8.        N1 INTEGER;  
    9.        N2 INTEGER;  
    10.   
    11.  FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS  
    12.  BEGIN  
    13.  RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYIN_M');  
    14.  END;  
    15.  BEGIN  
    16.         LEN := LENGTH(P_NAME);   
    17.         FOR I IN 1..LEN LOOP  
    18.             CHAR2 := SUBSTR(P_NAME, i, 1);  
    19.             N1 := FLOOR(ASCII(CHAR2) / 256);  
    20.             N2 := MOD(ASCII(CHAR2), 256);  
    21.   
    22.             IF N1 = 0 AND N2 <= 129 THEN  
    23.                V_RETURN := V_RETURN || CHAR2;  
    24.             ELSIF N2 <> 127 AND N2 <> 255 AND NOT (N2 >= 0 AND N2 <= 63) THEN   
    25.                 V_COMPARE := F_NLSSORT(SUBSTR(P_NAME, I, 1));  
    26.                 IF V_COMPARE >= F_NLSSORT(' 吖 ') AND V_COMPARE <= F_NLSSORT('驁 ') THEN  
    27.                    V_RETURN := V_RETURN || 'A';  
    28.                 ELSIF V_COMPARE >= F_NLSSORT('八 ') AND V_COMPARE <= F_NLSSORT('簿 ') THEN  
    29.                    V_RETURN := V_RETURN || 'B';  
    30.                 ELSIF V_COMPARE >= F_NLSSORT('嚓 ') AND V_COMPARE <= F_NLSSORT('錯 ') THEN  
    31.                    V_RETURN := V_RETURN || 'C';  
    32.                 ELSIF V_COMPARE >= F_NLSSORT('咑 ') AND V_COMPARE <= F_NLSSORT('鵽 ') THEN  
    33.                    V_RETURN := V_RETURN || 'D';  
    34.                 ELSIF V_COMPARE >= F_NLSSORT('妸 ') AND V_COMPARE <= F_NLSSORT('樲 ') THEN  
    35.                    V_RETURN := V_RETURN || 'E';  
    36.                 ELSIF V_COMPARE >= F_NLSSORT('发 ') AND V_COMPARE <= F_NLSSORT('猤 ') THEN  
    37.                    V_RETURN := V_RETURN || 'F';  
    38.                 ELSIF V_COMPARE >= F_NLSSORT('旮 ') AND V_COMPARE <= F_NLSSORT('腂 ') THEN  
    39.                    V_RETURN := V_RETURN || 'G';  
    40.                 ELSIF V_COMPARE >= F_NLSSORT('妎 ') AND V_COMPARE <= F_NLSSORT('夻 ') THEN  
    41.                    V_RETURN := V_RETURN || 'H';  
    42.                 ELSIF V_COMPARE >= F_NLSSORT('丌 ') AND V_COMPARE <= F_NLSSORT('攈 ') THEN  
    43.                    V_RETURN := V_RETURN || 'J';  
    44.                 ELSIF V_COMPARE >= F_NLSSORT('咔 ') AND V_COMPARE <= F_NLSSORT('穒 ') THEN  
    45.                    V_RETURN := V_RETURN || 'K';  
    46.                 ELSIF V_COMPARE >= F_NLSSORT('垃 ') AND V_COMPARE <= F_NLSSORT('擽 ') THEN  
    47.                    V_RETURN := V_RETURN || 'L';  
    48.                 ELSIF V_COMPARE >= F_NLSSORT('嘸 ') AND V_COMPARE <= F_NLSSORT('椧 ') THEN  
    49.                    V_RETURN := V_RETURN || 'M';  
    50.                 ELSIF V_COMPARE >= F_NLSSORT('拏 ') AND V_COMPARE <= F_NLSSORT('瘧 ') THEN  
    51.                    V_RETURN := V_RETURN || 'N';  
    52.                 ELSIF V_COMPARE >= F_NLSSORT('筽 ') AND V_COMPARE <= F_NLSSORT('漚 ') THEN  
    53.                    V_RETURN := V_RETURN || 'O';  
    54.                 ELSIF V_COMPARE >= F_NLSSORT('妑 ') AND V_COMPARE <= F_NLSSORT('曝 ') THEN  
    55.                    V_RETURN := V_RETURN || 'P';  
    56.                 ELSIF V_COMPARE >= F_NLSSORT('七 ') AND V_COMPARE <= F_NLSSORT('裠 ') THEN  
    57.                    V_RETURN := V_RETURN || 'Q';  
    58.                 ELSIF V_COMPARE >= F_NLSSORT('亽 ') AND V_COMPARE <= F_NLSSORT('鶸 ') THEN  
    59.                    V_RETURN := V_RETURN || 'R';  
    60.                 ELSIF V_COMPARE >= F_NLSSORT('仨 ') AND V_COMPARE <= F_NLSSORT('蜶 ') THEN  
    61.                    V_RETURN := V_RETURN || 'S';  
    62.                 ELSIF V_COMPARE >= F_NLSSORT('侤 ') AND V_COMPARE <= F_NLSSORT('籜 ') THEN  
    63.                    V_RETURN := V_RETURN || 'T';  
    64.                 ELSIF V_COMPARE >= F_NLSSORT('屲 ') AND V_COMPARE <= F_NLSSORT('鶩 ') THEN  
    65.                    V_RETURN := V_RETURN || 'W';  
    66.                 ELSIF V_COMPARE >= F_NLSSORT('夕 ') AND V_COMPARE <= F_NLSSORT('鑂 ') THEN  
    67.                    V_RETURN := V_RETURN || 'X';  
    68.                 ELSIF V_COMPARE >= F_NLSSORT('丫 ') AND V_COMPARE <= F_NLSSORT('韻 ') THEN  
    69.                    V_RETURN := V_RETURN || 'Y';  
    70.                 ELSIF V_COMPARE >= F_NLSSORT('帀 ') AND V_COMPARE <= F_NLSSORT('咗 ') THEN  
    71.                    V_RETURN := V_RETURN || 'Z';  
    72.                 END IF;  
    73.             END IF;  
    74.         END LOOP;  
    75.     RETURN V_RETURN;  
    76.  END;  
  • 相关阅读:
    《孙子兵法》(前六篇)读书笔记
    写代码的指导思想:如何写出易测、清晰、健壮的牢固代码
    如何从业务代码中抽离出可复用的微组件
    碎碎念集萃二八
    订单同步工程标准化改造事记
    代码的味道
    批量导出51电子发票的pdf文件
    LODOP具体的分类的简短问答
    lodop打印透明图简短问答
    LODOP打印公章的白色透明2
  • 原文地址:https://www.cnblogs.com/zfc2201/p/2452751.html
Copyright © 2011-2022 走看看