使用ORACLE函数,可以实现许多我们需要的功能,下面就教您如何使用ORACLE函数实现按汉字拼音首字母查询,如果您对ORACLE函数使用方面感兴趣的话,不妨一看。

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的灯塔网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
列表一行汉字
 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的开始的汉子分别是:“驁” “八”,依次类推可以找到其他的分界点,那么***的ORACLE函数就是如下:
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的人
  
【编辑推荐】
oracle函数返回表的实现
带您了解Oracle FBI索引
详解如何将Oracle安装为Linux服务
详解Oracle多种表连接方式
DB2常用函数和Oracle的比较
                文章题目:使用ORACLE函数实现按汉字拼音首字母查询
                
                网页网址:http://www.csdahua.cn/qtweb/news17/204217.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网