如题!SET GLOBAL log_bin_trust_function_creators = 1;
DELIMITER $$ DROP FUNCTION IF EXISTS `hzcode`$$ CREATE FUNCTION `hzcode`(s CHAR(255)) RETURNS CHAR(255) CHARSET utf8
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 ;
---------------------------
网上找到这个自定义函数
但是好像不好使 执行的结果时NULL
DELIMITER $$ DROP FUNCTION IF EXISTS `hzcode`$$ CREATE FUNCTION `hzcode`(s CHAR(255)) RETURNS CHAR(255) CHARSET utf8
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 ;
---------------------------
网上找到这个自定义函数
但是好像不好使 执行的结果时NULL
解决方案 »
- 每次重启服务器之后,第一次运行存储过程总报错
- 导入数据库文件后use数据库结果无响应
- 请大侠出手:从MySQL中导一张表到SQL SERVER中
- 求在XP下怎样做Postgresql的数据备份?紧急求助。。
- 怎么没人理我啊!!希望 insert 语句执行的返回值是所插入记录的key字段,可以怎样实现? 望高手指点
- php和Mysql的简单问题,拜托了!先谢谢各位
- 有关mysql数据库更新的问题,急急急急急.....在线等待!!!
- 【#1424】mysql 如何才可以创建这样一个函数?无限级分类的自动定位
- 为何mysql查询约4000条数量,很慢,约30s
- 关于排序问题,我想间隔输出
- 如何修改mysql表中字段类型
- 如何将一个表的内容添加到另一个表中。
在mysql 里实现查询汉字的拼音首字母
php 里查询汉字的拼音首字母已经有很多参考的代码了。
现在给出在mysql 里实现的, 测试环境是mysql-5.0.27-win321、建立拼音首字母资料表
[code]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); [/code]
d
select ord(substring('宋',0,1)); 3853355776
2、建立mysql 函数SET GLOBAL log_bin_trust_function_creators = 1;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 ;[/code]3、先测试一下
[font=Courier New]mysql> select hzcode('南海龙王');
+--------------------+
| hzcode('南海龙王') |
+--------------------+
| N |
+--------------------+
1 row in set (0.00 sec)[/font]4、建立个测试表[code]DROP TABLE IF EXISTS `f1`;
create table f1 (
name varchar(30) charset gbk,
pykey varchar(1) charset gbk
);insert into f1(name) values
('张三'),
('李四'),
('王五'),
('赵六'),
('钱七');[/code]5、测试[font=Courier New]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: 0mysql> select * from f1;
+------+-------+
| name | pykey |
+------+-------+
| 张三 | Z |
| 李四 | L |
| 王五 | W |
| 赵六 | Z |
| 钱七 | Q |
+------+-------+
5 rows in set (0.00 sec)
-------------------------------
就是实现这个功能
补充一个首拼音字母表
--------------------------------------
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);
1.你的拼音表是怎么计算出来的范围2.你的计算hz_py的算法为什么减去65536
因为是从网上查的 而且我用的时候字段为UTF-8编码的
不好使
来问问有人能具体的说下怎么通过拼音首字母检索这个字段
mysql 根据英文首字母来查询汉字函数
有时候看一下论坛中的精华贴就有类似的问题已经提过了。