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

介绍根据中文的首字母、笔画、部首排序函数【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  -www.2cto.com-

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

oracle按照拼音排序,ORACLE根据中文拼音首字母排序、取得中文拼音首字母函数相关推荐

  1. oracle+sql+按中文拼音排序,Oracle 中文字段进行排序的sql语句

    Oracle 中文字段进行排序的sql语句 1)按笔画排序 select * from Table order by nlssort(columnName,'NLS_SORT=SCHINESE_STR ...

  2. oracle 中文拼音取首字母,ORACLE依据中文拼音首字母排序、取得中文拼音首字母函数...

    当前位置:我的异常网» 数据库 » ORACLE依据中文拼音首字母排序.取得中文拼音首字母 ORACLE依据中文拼音首字母排序.取得中文拼音首字母函数 www.myexceptions.net  网友 ...

  3. Oracle 设置 sort au,oracle数据库拼音排序及NLS_SORT配备[转]

    oracle数据库拼音排序及NLS_SORT配置[转] Oracle9i之前,中文是按照二进制编码进行排序的.在oracle9i中新增了按照拼音.部首.笔画排序功能. 1.设置NLS_SORT参数值 ...

  4. oracle order by 汉字,Oracle Order by 按汉字拼音排序

    测试代码参见: select name ,ascii(name) from ( select '{' name from dual union select '%' name from dual un ...

  5. 按照 排序 oracle,oracle 按照中文排序

    在oracle 9i之前,对中文的排序,是默认按2进制编码来进行排序的. 9i时增加了几种新的选择: 按中文拼音进行排序:SCHINESE_PINYIN_M 按中文部首进行排序:SCHINESE_RA ...

  6. oracle 取英文排序,Oracle中中文、数字,英文混杂形式的字段进行排序的方法

    http://blog.csdn.net/p451933505/article/details/9272257 对Oracle中中文.数字.英文混杂形式的字段进行排序的方法: 例如: order by ...

  7. oracle英文字母排序,ORACLE中文排序

    Oracle9i之前,中文是按照二进制编码进行排序的. 在oracle9i中新增了按照拼音.部首.笔画排序功能.设置NLS_SORT值 SCHINESE_RADICAL_M 按照部首(第一顺序).笔划 ...

  8. 中文按拼音首字母排序的C++实现方案

    先介绍下背景,最近有个需求,需要将用户的好友列表按照昵称的拼音首字母排序,类似于手机电话簿的联系人.一开始建议让终端同学去做这点,毕竟终端现有的电话簿模块已经实现了,不过终端同学说电话簿是系统组件,移 ...

  9. MySQL中文无法按照拼音首字母排序解决方法convert(name USING gbk)

    问题如下: 使用默认的order by函数无法对中文数据按照首字母进行排序 SELECT * FROM `test_table` ORDER BY company_name,reply_room_na ...

  10. [转载]ExtJS中grid按照中文拼音首字母排序、改变行背景、列背景、静态数据分页不再困难...

    代码 1 本示例主要使用到了静态数据分页 Ext.data.PagingMemoryProxy组件.Ext.PagingToolbar分页条.viewConfig的getRowClass 方法.列co ...

最新文章

  1. JAVA多线程之Synchronized、wait、notify实例讲解
  2. 关于C#(ASP.net)存取MySQL LongText字段的心得[转]
  3. 线性回归算法数学原理_线性回归算法-非数学家的高级数学
  4. Python学习---Django的基础操作180116
  5. redis数据丢失_有效避免数据丢失!Redis持久化方案选择详解
  6. 数据结构与算法-笨办法解决问题1909
  7. keil5 配置 stm32f103rc 软件仿真
  8. html图片上下高度不一样,【已解决】HTML图片横向布局中第一张图片和其他图片高度不一致...
  9. PHP表单header post get
  10. No compiler is provided in this environment. Perhaps you are running on a JRE
  11. vue学习笔记-9-tab选项卡小案例
  12. 用matlab做音乐仿真,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真
  13. Access中的MDE文件
  14. future cancel失败一例
  15. 表哥推荐python自学书籍:从入门到精通,读这十本书就够了!
  16. 城乡规划一些不错的期刊
  17. XMOS笔记1--LED的控制
  18. php仅显示月份的日历,JSP_用JSP实现的一个日历程序,!-- 显示任意年、月的日历 - phpStudy...
  19. 永劫无间创建桌面快捷方式,并添加到steam库里
  20. 动态规划问题——换钱的最少货币数

热门文章

  1. Eplan绘图软件:EPLAN 中的项目结构
  2. UTC相关的时区转换
  3. 实现蓝色理想的运行代码
  4. 强化学习——Sarsa算法
  5. [大话设计模式C++版] 第7章 为别人做嫁衣 —— 代理模式
  6. 论文研读--Masked Generative Distillation
  7. 【读书笔记】之蔡康永的说话之道
  8. mysql reads sql data_在其声明中使用DETERMINISTIC,NO SQL或READS SQL DATA并启用二进制日志记录...
  9. “责任”也是一种竞争力:《穹顶之下》与美丽中国
  10. 东北大学材料成型工艺学中期末复习