首页 > 数据库技术 > 详细

Oracle提取中文字符串拼音首字母函数

时间:2019-02-12 11:15:33      阅读:504      评论:0      收藏:0      [点我收藏+]

通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母。

效果1,获取拼音简码:

技术分享图片

效果2,获取姓名首字母:

技术分享图片

创建函数:

/* 获取拼音简码函数 */
CREATE OR REPLACE FUNCTION GET_PYJM (P_NAME IN VARCHAR2)
    RETURN VARCHAR2
AS
    V_COMPARE   VARCHAR2 (100);
    V_RETURN    VARCHAR2 (4000);
BEGIN
    DECLARE
        FUNCTION F_NLSSORT (P_WORD IN VARCHAR2)
            RETURN VARCHAR2
        AS
        BEGIN
            RETURN NLSSORT (P_WORD, NLS_SORT=SCHINESE_PINYIN_M);
        END;
    BEGIN
        FOR I IN 1 .. LENGTH (P_NAME)
        LOOP
            V_COMPARE := F_NLSSORT (SUBSTR (P_NAME, I, 1));

            IF     V_COMPARE >= F_NLSSORT ()
               AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || A;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT (簿)
            THEN
                V_RETURN := V_RETURN || B;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || C;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || D;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || E;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || F;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || G;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || H;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || J;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || K;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || L;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || M;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || N;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || O;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || P;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || Q;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || R;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || S;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || T;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || W;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || X;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || Y;
            ELSIF     V_COMPARE >= F_NLSSORT ()
                  AND V_COMPARE <= F_NLSSORT ()
            THEN
                V_RETURN := V_RETURN || Z;
            END IF;
        END LOOP;

        RETURN V_RETURN;
    END;
END;

 

Oracle提取中文字符串拼音首字母函数

原文:https://www.cnblogs.com/Jackie-sky/p/10364208.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!