ORACLE根据中文拼音首字母排序、取得中文拼音首字母函数

根据中文拼音首字母排序、取得中文拼音首字母函数
    介绍根据中文的首字母、笔画、部首排序函数【NLSSORT】:
     
    1)、首字母
     
    SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, ‘NLS_SORT=SCHINESE_PINYIN_M‘);
     
    2)、笔画
    SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, ‘NLS_SORT=SCHINESE_STROKE_M‘);
     
    3)、部首
    SELECT * FROM T_TABLE ORDER BY NLSSORT(NAME, ‘NLS_SORT=SCHINESE_RADICAL_M‘);
     
    列表一行汉字
    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  -www.2cto.com-
    (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  -www.2cto.com-
    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    
    返回首字母:wdf

java企业级通用权限安全框架源码 SpringMVC mybatis or hibernate+ehcache shiro druid bootstrap HTML5

【java框架源码下载】

时间: 2024-08-10 03:17:49

ORACLE根据中文拼音首字母排序、取得中文拼音首字母函数的相关文章

SQL 用中文的拼音和笔画排序

SQL 用中文的拼音和笔画排序 城市按拼音排序: SELECT chineseName FROM [表名] order by chinesename collate Chinese_PRC_CS_AS_KS_WS asc 城市按笔划排序: SELECT chineseName FROM [表名] order by chinesename collate Chinese_PRC_Stroke_CS_AS_KS_WS   asc 以上代码中GD上调试通过. 多说两句,排序规则名称由两部份构成,前半部

用ItemDecoration实现按字母排序列表

首先看看实现的效果 可以看出要实现上面效果,有三个步骤: 1.汉字转化为拼音,并且根据首字母排序 2.用ItemDecoration实现字母行的显示 3.自定义实现右侧的按字母导航栏 当然重点讲讲ItemDecoration的实现.都知道RecyclerView本身都没有分割线,需要分割线都是在item中画一条线或者使用ItemDecoration来实现分割线.在RecyclerView中我们可以给每一个item都添加ItemDecoration,所以可以自定义ItemDecoration来实现

Elasticsearch高级搜索排序( 中文+拼音+首字母+简繁转换+特殊符号过滤)

一.先摆需求: 1.中文搜索.英文搜索.中英混搜   如:"南京东路","cafe 南京东路店" 2.全拼搜索.首字母搜索.中文+全拼.中文+首字母混搜   如:"nanjingdonglu","njdl","南京donglu","南京dl","nang南东路","njd路"等等组合 3.简繁搜索.特殊符号过滤搜索   如:"龍馬&quo

Oracle 10g如何对用户姓名,按首字母排序、查询

首先介绍Oracle 9i新增加的一个系统自带的排序函数 1.按首字母排序 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值     SCHINESE_RADICAL_M   按照部首(第一顺序).笔划(第二顺序)排序     SCHINESE_STROKE_M   按照笔划(第一顺序).部首(第二顺序)排序     SCHINESE_PINYIN_M   按照拼音排序 oracle9i中新增了按照拼音.部首.笔画排序功能 用法示例: 拼音 SELECT * FRO

php按照中文首字母排序

1> 网络上很多php的工具类可以将汉字转为拼音: 2> 将拼音进行排序即可 另一种则是类似mysql转码方式: 1 foreach ($array as $key=>$value) 2 { 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value); 4 } 1 foreach ($array as $key=>$value) 2 { 3 $new_array[$key] = iconv('UTF-8', 'GBK', $value);

中文首字母 排序

因项目需要对通讯录中的联系人进行排序,需要对中文字符进行拼音转换.其实这个转换并没有想象中的那么难(因为我们只是把中文转为拼音首字母而已,比如“王”转换为字母w就可以了,而不需要转换为完整的拼音wang).对此,我们找到了一个简便的解决办法:一个老外(代码中签名的作者叫George)用c语言写了一个pinyinFirstLetter函数用于获取中文拼音首字母. 这个函数主要基于一个巨大的c语言char数组,把unicode字符集中所有中文的拼音首字母都映射进去了. pinyinFirstLett

JS获取中文拼音首字母,并通过拼音首字母快速查找页面内的中文内容

实现效果: 图一: 图二: 此例中输入的中文字符串"万万保重",有三个字是多音字,所以alert对话框中显示的是多种读音的组合: 如何实现? 如何实现通过拼音首字母快速查找页面内的中文内容呢? 过程原理是这样的:例如要对一些人名进行快速查找,当页面加载完成后,对所有人名建立一个索引,生成拼音首字母与姓名的对应关系:然后监听键盘事件,当用户按下键盘时,根据键值得到按下的是哪个字母,然后遍历索引中是否存在相同的拼音首字母: 这里还实现了根据字母组合来查找的功能,原理是这样的:当用户按键时,

sql语句按照汉字拼音首字母排序

oracle : 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值SCHINESE_RADICAL_M 按照部首(第一顺序).笔划(第二顺序)排序SCHINESE_STROKE_M 按照笔划(第一顺序).部首(第二顺序)排序SCHINESE_PINYIN_M 按照拼音排序,系统的默认排序方式为拼音排序 举例如下:表名为 dept ,其中name字段是中文,下面分别实现按照单位名称的笔划.部首和拼音排序.//按照笔划排序select * from dept order

按拼音首字母排序

<?php $temp = array(); // 按拼音首字母排序 foreach($res as $key=>$val){ $index = $this->sortByPinyin($val['note_name']); $temp[$index][] = $val; //先用中间变量数组,根据字母A B C..装着集合在一起的 } $list = array(); foreach($temp as $k=>$v){ $list[$k]['index'] = $k; $list