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;

相关文章
|
6月前
|
SQL Oracle 关系型数据库
Oracle查询优化-计算字符在字符串中出现的次数
【2月更文挑战第3天】【2月更文挑战第7篇】只接上SQL
138 0
|
18天前
|
SQL Oracle 关系型数据库
[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
本文介绍了多种SQL内置函数,包括单行函数、非空判断函数、日期函数和正则表达式相关函数。每种函数都有详细的参数说明和使用示例,帮助读者更好地理解和应用这些函数。文章强调了字符串操作、数值处理、日期计算和正则表达式的使用方法,并提供了丰富的示例代码。作者建议读者通过自测来巩固学习成果。
15 1
[Oracle]面试官:你举例几个内置函数,并且说说如何使用内置函数作正则匹配
|
4月前
|
SQL Oracle 算法
|
4月前
|
SQL Oracle 关系型数据库
|
4月前
|
SQL Oracle 关系型数据库
Oracle|内置函数之INSTR
【7月更文挑战第5天】
|
4月前
|
Oracle 关系型数据库 数据挖掘
|
4月前
|
Oracle 关系型数据库 数据挖掘
|
5月前
|
存储 Oracle NoSQL
Oracle中decode函数详解
Oracle中decode函数详解
|
5月前
|
Oracle 关系型数据库 大数据
oracle递归函数
oracle递归函数
|
6月前
|
NoSQL Oracle 关系型数据库
MongoDB与Oracle:管道函数兼容之道
【4月更文挑战第20天】
67 2