Database & 技术 19 Mar 2007 11:49 am

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

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

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

  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 函数

  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、先测试一下
mysql> select hzcode(’南海龙王’);
+——————–+
| hzcode(’南海龙王’) |
+——————–+
| N |
+——————–+
1 row in set (0.00 sec)

4、建立个测试表

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

5、测试

mysql> select * from f1;
+——+——-+
| name | pykey |
+——+——-+
| 张三 | NULL |
| 李四 | NULL |
| 王五 | NULL |
| 赵六 | NULL |
| 钱七 | NULL |
+——+——-+
5 rows in set (0.00 sec)

mysql> update f1 set pykey = hzcode(name);
Query OK, 5 rows affected (0.05 sec)
Rows matched: 5 Changed: 5 Warnings: 0

mysql> select * from f1;
+——+——-+
| name | pykey |
+——+——-+
| 张三 | Z |
| 李四 | L |
| 王五 | W |
| 赵六 | Z |
| 钱七 | Q |
+——+——-+
5 rows in set (0.00 sec)

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

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply