手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

在mysql 里实现查询汉字的拼音首字母[摘]

首页 > DataBase >

原文地址:http://bbs.zdnet.com.cn/thread-60379-1-4.html


php 里查询汉字的拼音首字母已经有很多参考的代码了。
现在给出在mysql 里实现的, 测试环境是mysql-5.0.27-win32

1、建立拼音首字母资料表

SQL代码
  1. DROP   TABLE   IF   EXISTS   `pyk`;     
  2.   CREATE   TABLE   `pyk`   (     
  3.       `PY`   varchar(1)    ,     
  4.       `HZ1`   int  ,  
  5.       `HZ2`   int        
  6.   ) ;  
  7.      
  8. INSERT   INTO   `pyk`   (`PY`,`HZ1`,`HZ2`)   VALUES       
  9. ('A',-20319,-20284),  
  10. ('B',-20283,-19776),  
  11. ('C',-19775,-19219),  
  12. ('D',-19218,-18711),  
  13. ('E',-18710,-18527),  
  14. ('F',-18526,-18240),  
  15. ('G',-18239,-17923),  
  16. ('I',-17922,-17418),                
  17. ('J',-17417,-16475),                
  18. ('K',-16474,-16213),                
  19. ('L',-16212,-15641),                
  20. ('M',-15640,-15166),                
  21. ('N',-15165,-14923),                
  22. ('O',-14922,-14915),                
  23. ('P',-14914,-14631),                
  24. ('Q',-14630,-14150),                
  25. ('R',-14149,-14091),                
  26. ('S',-14090,-13319),                
  27. ('V',-13318,-12839),                
  28. ('W',-12838,-12557),                
  29. ('X',-12556,-11848),                
  30. ('Y',-11847,-11056),                
  31. ('Z',-11055,-10247);     

2、建立mysql 函数

SQL代码
  1. DROP FUNCTION IF EXISTS hzcode;  
  2.   
  3. delimiter //  
  4.   
  5. CREATE FUNCTION hzcode (s CHAR(255)) RETURNS char  
  6. BEGIN  
  7. DECLARE hz_code int;  
  8. DECLARE hz_py char;  
  9. SET hz_code = ord(substring(s,1,1))*256+ord(substring(s,2,1))-65536 ;  
  10. select py into hz_py from pyk where  hz_code>=pyk.hz1 and hz_code<=pyk  
  11. .hz2;                    
  12. RETURN hz_py;  
  13. END  
  14. //  
  15.   
  16. delimiter ;  

3、先测试一下

XML/HTML代码
  1. mysql> select hzcode('南海龙王');  
  2. +--------------------+  
  3. | hzcode('南海龙王')  |  
  4. +--------------------+  
  5. | N                  |  
  6. +--------------------+  
  7. 1 row in set (0.00 sec)  

4、建立个测试表

SQL代码
  1. DROP   TABLE   IF   EXISTS  `f1`;  
  2. create table f1 (  
  3. name varchar(30),  
  4. pykey varchar(1)  
  5. );  
  6.   
  7. insert into f1(namevalues  
  8. ('张三'),  
  9. ('李四'),  
  10. ('王五'),  
  11. ('赵六'),  
  12. ('钱七');  

5、测试

XML/HTML代码
  1. mysql> select * from f1;  
  2. +------+-------+  
  3. | name | pykey |  
  4. +------+-------+  
  5. | 张三 | NULL  |  
  6. | 李四 | NULL  |  
  7. | 王五 | NULL  |  
  8. | 赵六 | NULL  |  
  9. | 钱七 | NULL  |  
  10. +------+-------+  
  11. 5 rows in set (0.00 sec)  
  12.   
  13. mysql> update f1 set pykey = hzcode(name);  
  14. Query OK, 5 rows affected (0.05 sec)  
  15. Rows matched: 5  Changed: 5  Warnings: 0  
  16.   
  17. mysql> select * from f1;  
  18. +------+-------+  
  19. | name | pykey |  
  20. +------+-------+  
  21. | 张三 | Z     |  
  22. | 李四 | L     |  
  23. | 王五 | W     |  
  24. | 赵六 | Z     |  
  25. | 钱七 | Q     |  
  26. +------+-------+  
  27. 5 rows in set (0.00 sec)  
  28.    

这样就很方便地在MYSQL里查询汉字的首字母了。 类似地也可以直接在MYSQL得到汉字拼音。 不过需要拼音表,函数写法也不一样。

--END--




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: mysql, 拼音, 搜索

« 上一篇 | 下一篇 »

只显示10条记录相关文章

4条记录访客评论

这种高质量的文章越来越少了

Post by 烟台seo on 2012, February 9, 10:12 AM 引用此文发表评论 #1

你这个函数有问题,查处来的值根本就不在pyk表的范围!

Post by 飞鸿无痕 on 2011, July 8, 5:57 PM 引用此文发表评论 #2

这也是我搜索到的,反正能用就好。。。

Post by gouki on 2008, July 28, 2:21 PM 引用此文发表评论 #3

挺好的,谢谢啊!

Post by qiqi on 2008, July 28, 10:02 AM 引用此文发表评论 #4


发表评论

评论内容 (必填):