oracle 提取中文字符串拼音首字母函数,拼音简码提取函数

简介:

从别的数据库里拿到的获取拼音简码的函数,觉得挺有意思的,具体的思路就是,通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母。具体实现效果和代码如下。

希望能帮助到你

select GET_PYJM('赵鹏') from dual;

1 ZP

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;

相关文章
|
2月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
49 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之日期计算相关函数
Oracle之日期计算相关函数
45 0
|
4月前
|
SQL Oracle 关系型数据库
Oracle之regexp系列函数详解
Oracle之regexp系列函数详解
136 1
|
3月前
|
存储 Java 数据库
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数(二)
JAVAEE框架数据库技术之13_oracle 之PLSQL技术及存储过程和函数
38 0
|
3月前
|
SQL Oracle 关系型数据库
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
66 0
JAVAEE框架数据库技术之12_oracle常用函数和高级查询子查询
|
4天前
|
Oracle 算法 关系型数据库
Oracle常用系统函数之数字类函数:数字的魔术师
【4月更文挑战第19天】Oracle数据库中的数字类函数是数字处理的魔术师,包括`ROUND`(四舍五入),`CEIL`和`FLOOR`(向上/下取整),以及`ABS`(计算绝对值)。还有`MOD`、`TRUNC`和`POWER`等函数,提供求余数、截断和计算幂的功能。熟练运用这些函数能提升数据管理效率,让处理数字变得更简单、有趣。
|
4月前
|
SQL Oracle 关系型数据库
Oracle之如何遍历字符串
Oracle之如何遍历字符串
45 1
|
1月前
|
SQL Oracle 关系型数据库
Oracle insert数据时字符串中有‘单引号问题
Oracle insert数据时字符串中有‘单引号问题
|
2月前
|
SQL Oracle 关系型数据库
Oracle查询优化-聚集函数
【2月更文挑战第5天】【2月更文挑战第13篇】聚集函数
19 4
|
2月前
|
存储 Oracle 关系型数据库
Oracle查询优化-提取姓名大写首字母缩写
【2月更文挑战第5天】【2月更文挑战第11篇】提取姓名大写首字母缩写
32 6

推荐镜像

更多