`
sillycat
  • 浏览: 2552823 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ORACLE函数获取汉字拼音首字母

阅读更多
ORACLE函数获取汉字拼音首字母

参考文章
http://news.newhua.com/news1/program_database/2008/526/0852615338H3AACHF553F9C4218GD3DCAIDB6GABC0B96052J6026AG.html?lt=common

列表一行汉字
WITH A AS
(SELECT '获取汉字拼音首字母' W FROM DUAL)
SELECT SUBSTR(W, ROWNUM, 1) FROM A
CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A);
返回结果










用汉字字符集对这个列表进行排序
WITH A AS
(SELECT '获取汉字拼音首字母' W FROM DUAL)
SELECT SUBSTR(W, ROWNUM, 1) FROM A
CONNECT BY ROWNUM <= (SELECT LENGTH(W) FROM A)
ORDER BY NLSSORT(SUBSTR(W, ROWNUM, 1), 'NLS_SORT=SCHINESE_PINYIN_M');
返回结果










那么根据这个原理,上面输入一个拼音A打头的字"澳",后面输入一个B大头的字"吧",找到每个音节的起止的汉字是哪个
WITH A AS
(
SELECT ROWNUM RN, CHR(ROWNUM) C FROM DUAL CONNECT BY LEVEL <= 65535
)
SELECT * FROM A WHERE LENGTHB(C) = 2
AND RN > 32768
AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') > NLSSORT('澳', 'NLS_SORT=SCHINESE_PINYIN_M')
AND NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M') < NLSSORT('吧', 'NLS_SORT=SCHINESE_PINYIN_M')
ORDER BY NLSSORT(C, 'NLS_SORT=SCHINESE_PINYIN_M');
根据返回的结果,就能看到,A的结束和B的开始的汉子分别是:“驁” “八”,依次类推可以找到其他的分界点,那么最后的函数就是如下:

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS
V_COMPARE VARCHAR2(100);
V_RETURN VARCHAR2(4000);

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;

测试一下:
SELECT F_TRANS_PINYIN_CAPITAL('罗华') FROM DUAL   
返回 lh
使用的时候这样查询:
select name from users t1 where (t1.name = ? or F_TRANS_PINYIN_CAPITAL(t1.name) = ?)
如果里面的?参数传递的是“罗华”,就是查询用户名是落花的人,如果传递的是lh的话,查询的就是拼音是lh的人
分享到:
评论
1 楼 sea0108 2011-08-17  
不错啊

相关推荐

    oracle获取汉字拼音和拼音首字母的功能函数

    6. **拼音首字母获取** 获取汉字的拼音首字母相对简单,因为大多数汉字的拼音首字母是固定的。可以创建一个映射表,存储每个汉字对应的首字母,然后通过查找表来快速获取。对于多音字,可能需要额外处理,选择最...

    Oracle查询取汉字拼音首字母

    Oracle查询取汉字拼音首字母Function

    oracle获取汉字拼音首字母

    ### Oracle 获取汉字拼音首字母 在Oracle数据库中实现获取汉字拼音首字母的需求,通常涉及到对中文字符的处理以及拼音转换的技术。这样的功能可以应用于多种场景,例如数据排序、索引建立或是快速检索等。本文将...

    MySQL函数实现获取汉字拼音首字母

    使用MySQL函数,实现获取汉字拼音首字母。在SQL语句中传入汉字返回对应的首字母

    oracle批量修改汉字转拼音首字母的函数

    但Oracle默认不支持直接获取拼音首字母,因此通常需要自定义函数来处理。 下面是一个简单的自定义PL/SQL函数示例,用于获取汉字的拼音首字母: ```sql CREATE OR REPLACE FUNCTION get_initials(p_chinese CHAR) ...

    ORACLE中取汉字拼音首字母的存储过程

    本文将详细解析一个用于在Oracle中获取汉字拼音首字母的存储过程,该过程通过一系列精心设计的字符串转换逻辑实现。 ### 存储过程概述 存储过程名为`FUN_SPELLCODE`,它接受一个参数`PRM_SPELLIN`,类型为`VARCHAR...

    oracle创建函数生成拼音码(汉字首字母)

    oracle创建函数生成拼音码(汉字首字母)

    oracle提取汉字拼音和首字母

    这里提到的"oracle提取汉字拼音和首字母"可能是一个PL/SQL包,包含了一系列的函数,用于将汉字转换为对应的拼音和首字母。 1. **汉字转拼音** 汉字转拼音的过程通常涉及到文本解析和字符串操作。这个PL/SQL存储...

    oracle_获取汉字拼音

    首先,`获取汉字拼音和拼音首字母的功能函数.pdf`可能是一个文档,详细介绍了如何创建和使用这类函数。通常,这样的函数会包含两个部分:一是将汉字转换为全拼,二是提取汉字的首字母。全拼转换是将每个汉字转化为其...

    Oracle汉字拼音首字母函数

    ### Oracle汉字拼音首字母函数详解 #### 一、概述 在数据库处理中文数据时,有时候我们需要根据汉字转换成对应的拼音首字母来进行检索或排序。Oracle提供了多种方式来处理字符串,但针对汉字转拼音首字母的功能并...

    oracle生成拼音、五笔首字母的functions方法

    这两个脚本文件`oracle生成五笔首字母的functions方法.sql`和`oracle生成拼音首字母的functions方法.sql`应该包含了实现这些功能的自定义PL/SQL函数。在实际应用中,你可以将这些函数嵌入到你的查询或存储过程中,...

    Oracle获取汉字拼音和拼音首字母的功能函数

    本文将详细讲解如何在Oracle中实现获取汉字的拼音和拼音首字母的功能。 首先,我们要知道Oracle并不内置直接支持汉字转拼音的函数。但是,我们可以利用一些额外的资源,比如创建存储过程或者使用第三方的PL/SQL包来...

    Oracle 汉字转全拼 拼音首字母

    --此函数默认返回汉字拼音的首字母,第二个参数不为空则返回全拼。 create or replace function f_getFirstOrFullSpell(p_cnStr In varchar2,p_sign In number default null) return varchar2 as lv_spell varchar2...

    完整简洁的Oracle获得汉字字符串拼音首字母和全拼的函数

    完整简洁的Oracle获得汉字字符串拼音首字母和全拼的函数 方案一(是方案二的包体方式)pinyin(拼音之间有空格) 方案二(较慢)常用中文字符转全拼音函数(有空格) 方案三(最优)完整简洁的Oracle获得汉字字符串拼音首字母...

    取汉字拼音或首字母的PL/SQL存储过程

    -- 提取首字母,这里假设拼音首字母在ASCII码的前26个字母内 IF ascii BETWEEN 'A' AND 'Z' THEN first_char := ascii; ELSE first_char := 'X'; -- 对于非字母字符,可以设置为特定标记 END IF; output_char...

    汉字转全拼或首字母Oracle存储过程

    "汉字转全拼或首字母Oracle存储过程"就是这样一个工具,它能够帮助我们高效地完成汉字到拼音的转化。 首先,我们需要了解汉字转全拼的基本原理。汉字的全拼是基于汉语拼音,每一个汉字都有对应的拼音表示。在计算机...

    oracle拼音首字母查询

    Oracle拼音首字母查询是一种在Oracle数据库中实现对汉字进行拼音首字母检索的技术。在中文环境中,为了方便用户根据汉字的拼音首字母进行快速查找,这种查询方式尤其有用。Oracle数据库虽然原生支持英文字符集,但...

    oracle汉字转拼音函数整理大全

    - `2`: 返回首字母大写的拼音,每个汉字拼音之间用空格分隔。 - `3`: 同上。 - `4`: 同上。 - 示例: - `fn_getpyKGJG('你好', 0)` 返回 `'ni hao'` - `fn_getpyKGJG('你好', 1)` 返回 `'NI HAO'` - `fn_...

    关于Oracle中转中文,获取首字母的问题

    在Oracle数据库中处理中文字符,特别是需要将汉字转换为拼音并获取首字母,是一个常见的需求。这在构建索引、搜索优化或者特定的数据处理场景中非常有用。本篇将详细探讨如何在Oracle环境下实现这个功能。 首先,...

    Oracle 汉字拼音简码获取

    ### Oracle 汉字拼音简码获取:深入解析与应用 在现代信息技术中,文本处理尤其是多语言文本处理,已经成为数据库管理和应用开发中的关键环节。其中,将汉字转换为其拼音简码(即取每个汉字拼音的首字母)是常见的...

Global site tag (gtag.js) - Google Analytics