喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【村长请吃饭啊】 ---北京诚聘--- 【你还在犹豫吗?】

上一主题 下一主题
 20  1/2  1  2  > 
     
标题: [原创] 在mysql 里实现查询汉字的拼音首字母  
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1177
帖子 801
金钱 663 喜悦币
威望 0
人脉 514
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
在mysql 里实现查询汉字的拼音首字母

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

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

DROP   TABLE   IF   EXISTS   `pyk`;   
  CREATE   TABLE   `pyk`   (   
      `PY`   varchar(1)    ,   
      `HZ1`   int  ,
      `HZ2`   int      
  ) ;
   
INSERT   INTO   `pyk`   (`PY`,`HZ1`,`HZ2`)   VALUES     
('A',-20319,-20284),
('B',-20283,-19776),
('C',-19775,-19219),
('D',-19218,-18711),
('E',-18710,-18527),
('F',-18526,-18240),
('G',-18239,-17923),
('I',-17922,-17418),              
('J',-17417,-16475),              
('K',-16474,-16213),              
('L',-16212,-15641),              
('M',-15640,-15166),              
('N',-15165,-14923),              
('O',-14922,-14915),              
('P',-14914,-14631),              
('Q',-14630,-14150),              
('R',-14149,-14091),              
('S',-14090,-13319),              
('V',-13318,-12839),              
('W',-12838,-12557),              
('X',-12556,-11848),              
('Y',-11847,-11056),              
('Z',-11055,-10247);   
2、建立mysql 函数

DROP FUNCTION IF EXISTS hzcode;

delimiter //

CREATE FUNCTION hzcode (s CHAR(255)) RETURNS char
BEGIN
DECLARE hz_code int;
DECLARE hz_py char;
SET hz_code = ord(substring(s,1,1))*256+ord(substring(s,2,1))-65536 ;
select py into hz_py from pyk where  hz_code>=pyk.hz1 and hz_code<=pyk
.hz2;                  
RETURN hz_py;
END
//

delimiter ;
3、先测试一下
mysql> select hzcode('南海龙王');
+--------------------+
| hzcode('南海龙王') |
+--------------------+
| N                  |
+--------------------+
1 row in set (0.00 sec)


4、建立个测试表

DROP   TABLE   IF   EXISTS  `f1`;
create table f1 (
name varchar(30),
pykey varchar(1)
);

insert into f1(name) values
('张三'),
('李四'),
('王五'),
('赵六'),
('钱七');
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得到汉字拼音。 不过需要拼音表,函数写法也不一样。




锐升科技
2007-3-10 09:57 PM#1
查看资料  Blog  发短消息  QQ  顶部
 
xiaoqiang527
乞丐




UID 88496
精华 0
积分 -9
帖子 6
金钱 -9 喜悦币
威望 0
人脉 0
阅读权限 1
注册 2007-2-25
来自 beijing
状态 离线
[推荐阅读] 有谁在用水云斋2.0的系统
猛一看。。还真是不明白。

仔细看看。。略微懂了些。

存起来研究了。。。

谢了。。lz!




学习中..............
2007-3-12 09:58 PM#2
查看资料  发短消息  顶部
 
andsky (andsky)
注册会员
Rank: 2
一般会员



UID 63241
精华 0
积分 76
帖子 81
金钱 76 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-2-18
状态 离线
[推荐阅读] 【求助】jpgraph中中文显示乱码问题(非title)
不错,以前还直没在mysql里这么用过!
2007-3-14 12:51 PM#3
查看资料  访问主页  发短消息  顶部
 
菜鸟也要有理想
中级会员
Rank: 3Rank: 3
一般会员



UID 65342
精华 0
积分 439
帖子 426
金钱 439 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2005-8-1
状态 离线
[推荐阅读] 上海热线招聘PHP高级软件工程师
我一般都另外建立一个字段来存放。。。



BLOG:http://www.kk.la
2007-3-15 06:47 AM#4
查看资料  发短消息  顶部
 
dreamblaze
高级会员
Rank: 4
administrator


UID 78956
精华 0
积分 986
帖子 1000
金钱 862 喜悦币
威望 0
人脉 124
阅读权限 50
注册 2006-8-24
来自 福州
状态 离线
[推荐阅读] 同学们,请推荐用phplib tem做的文章或者新闻系统,我想参考以下,多谢
看看再说
2007-3-16 06:54 PM#5
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 求救-phpMyAdmin比较离奇的问题
如果用sqlite的话,效率可能就高多了,尤其是function用C写的话.




2007-3-17 02:06 PM#6
查看资料  访问主页  Blog  发短消息  顶部
 
seakingx
金牌会员
Rank: 6Rank: 6


UID 75142
精华 0
积分 1177
帖子 801
金钱 663 喜悦币
威望 0
人脉 514
阅读权限 70
注册 2006-6-18
来自 海口
状态 离线
[推荐阅读] 变量的作用域


QUOTE:
原帖由 fcicq 于 2007-3-17 02:06 PM 发表
如果用sqlite的话,效率可能就高多了,尤其是function用C写的话.
sqlite 还没接触过,有空再下一个来试试




锐升科技
2007-3-17 03:39 PM#7
查看资料  Blog  发短消息  QQ  顶部
 
abcdefghijk_
新手上路
Rank: 1



UID 82776
精华 0
积分 1
帖子 3
金钱 1 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-11-7
状态 离线
[推荐阅读] 今天见鬼了AJAX问题
呵呵。
2007-3-17 11:45 PM#8
查看资料  发短消息  顶部
 
herolee
新手上路
Rank: 1



UID 80060
精华 0
积分 4
帖子 4
金钱 4 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-9-14
状态 离线
[推荐阅读] 有兴趣的来看看你们的古代名字叫什么
谢谢,这个函数很有实际意义
2007-3-23 05:54 PM#9
查看资料  发短消息  顶部
 
小树叶子
注册会员
Rank: 2



UID 88652
精华 0
积分 76
帖子 38
金钱 76 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2007-2-28
状态 离线
[推荐阅读] 关于mysql_tablename函数请教!
为什么那个函数建立有错误??
2007-4-10 11:11 AM#10
查看资料  发短消息  顶部
 20  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.025717 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP