用mysql建立一个函数功能是:英文首字母来查询汉字
解决方案 »
- 存储过程游标使用中的奇怪问题???
- 查询语句如何优化啊,1W条就开始慢了
- mysql 存储过程 发邮件
- mysql为何默认是latin 1字符集呀?phpmyadmin中显示中文乱码?
- mysql错误“Got error 134 from storage engine”
- 不知道哪来的filesort! ACMAIN_CHM等请进!
- 在线等!!! asp网站mssql 换成mysql!!!
- 非常想专业地学习数据库编程,学习方式,步骤,以及相关书籍的选择, 恳求高见!
- 谁知道这个怎么解决 我搞了好几天了 急的蛋疼
- 新人看了一个下午的视频都看不懂数据类型是怎么回事?
- mysql命令问题
- C语言 操作MySQL UPDATE有问题,请教。
`A_Id` int(10) NOT NULL auto_increment,
`A_UserName` varchar(50) default NULL,
`A_PassWord` varchar(50) default NULL,
`A_Name` varchar(50) default NULL,
`A_Sex` varchar(50) default NULL,
`A_IdCard` varchar(50) default NULL,
`A_LeaveCase` mediumtext,
PRIMARY KEY (`A_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
A_UserName
[code=BatchFile]+------+--------+-------+
| f_PY | cBegin | cEnd |
+------+--------+-------+
| A | 45217 | 45252 |
| B | 45253 | 45760 |
.....
| Z | 54481 | 55289 |
+------+--------+-------+[/code]然后直接查询就行了。mysql> create table t_cosler(
-> f_PY char primary key,
-> cBegin SMALLINT UNSIGNED not null,
-> cEnd SMALLINT UNSIGNED not null
-> );
Query OK, 0 rows affected (0.09 sec)mysql> insert into t_cosler values
-> ('A',0xB0A1,0xB0C4),
-> ('B',0xB0C5,0xB2C0),
-> ('C',0xB2C1,0xB4ED),
-> ('D',0xB4EE,0xB6E9),
-> ('E',0xB6EA,0xB7A1),
-> ('F',0xB7A2,0xB8C0),
-> ('G',0xB8C1,0xB9FD),
-> ('H',0xB9FE,0xBBF6),
-> ('J',0xBBF7,0xBFA5),
-> ('K',0xBFA6,0xC0AB),
-> ('L',0xC0AC,0xC2E7),
-> ('M',0xC2E8,0xC4C2),
-> ('N',0xC4C3,0xC5B5),
-> ('O',0xC5B6,0xC5BD),
-> ('P',0xC5BE,0xC6D9),
-> ('Q',0xC6DA,0xC8BA),
-> ('R',0xC8BB,0xC8F5),
-> ('S',0xC8F6,0xCBF9),
-> ('T',0xCBFA,0xCDD9),
-> ('W',0xCDDA,0xCEF3),
-> ('X',0xCEF4,0xD188),
-> ('Y',0xD1B9,0xD4D0),
-> ('Z',0xD4D1,0xD7F9);
Query OK, 23 rows affected (0.16 sec)
Records: 23 Duplicates: 0 Warnings: 0mysql> select * from o_personnel;
+------+------------+
| A_Id | A_UserName |
+------+------------+
| 1 | 首先 |
| 2 | 检查 |
| 3 | 我们 |
| 4 | 的二 |
| 5 | 进制 |
| 6 | 是否 |
| 7 | 适合 |
| 8 | 你的 |
| 9 | 平台 |
+------+------------+
9 rows in set (0.00 sec)mysql> select p.*,c.*
-> from o_personnel p , t_cosler c
-> where CONV(HEX(left(A_UserName,1)),16,10) between c.cBegin and c.cEnd;
+------+------------+------+--------+-------+
| A_Id | A_UserName | f_PY | cBegin | cEnd |
+------+------------+------+--------+-------+
| 4 | 的二 | D | 46318 | 46825 |
| 2 | 检查 | J | 48119 | 49061 |
| 5 | 进制 | J | 48119 | 49061 |
| 8 | 你的 | N | 50371 | 50613 |
| 9 | 平台 | P | 50622 | 50905 |
| 1 | 首先 | S | 51446 | 52217 |
| 6 | 是否 | S | 51446 | 52217 |
| 7 | 适合 | S | 51446 | 52217 |
| 3 | 我们 | W | 52698 | 52979 |
+------+------------+------+--------+-------+
9 rows in set (0.00 sec)mysql>查S开头的
mysql> select p.*
-> from o_personnel p , t_cosler c
-> where CONV(HEX(left(A_UserName,1)),16,10) between c.cBegin and c.cEnd
-> and c.f_PY='S';
+------+------------+
| A_Id | A_UserName |
+------+------------+
| 1 | 首先 |
| 6 | 是否 |
| 7 | 适合 |
+------+------------+
3 rows in set (0.00 sec)mysql>方法二:不用这个t_cosler表,直接写个函数权限汉字得到拼音。局限性: 以上方法,均依照汉字区位表来实现,对区位后面的复杂字,无法准确判断,对多音字无法准确判断。方法三:从微软拼音中导出所有汉字的拼音表。
mysql> SELECT *,
-> ELT(INTERVAL(CONV(HEX(left(A_UserName,1)),16,10),
-> 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7,0
xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCE
F4,0xD1B9,0xD4D1),
-> 'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q',
'R','S','T','W','X','Y','Z') as PY
-> from o_personnel;
+------+------------+------+
| A_Id | A_UserName | PY |
+------+------------+------+
| 1 | 首先 | S |
| 2 | 检查 | J |
| 3 | 我们 | W |
| 4 | 的二 | D |
| 5 | 进制 | J |
| 6 | 是否 | S |
| 7 | 适合 | S |
| 8 | 你的 | N |
| 9 | 平台 | P |
+------+------------+------+
9 rows in set (0.00 sec)mysql>
呵呵
结了
-> CHAR(INTERVAL(CONV(HEX(left(A_UserName,1)),16,10),
-> 0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,
-> 0xBBF7,0xBBF7,0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,
-> 0xC6DA,0xC8BB,0xC8F6,0xCBFA,0xCDDA,0xCDDA,0xCDDA,0xCEF4,
-> 0xD1B9,0xD4D1)+64) as PY
-> from o_personnel;
+------+------------+------+
| A_Id | A_UserName | PY |
+------+------------+------+
| 1 | 首先 | S |
| 2 | 检查 | J |
| 3 | 我们 | W |
| 4 | 的二 | D |
| 5 | 进制 | J |
| 6 | 是否 | S |
| 7 | 适合 | S |
| 8 | 你的 | N |
| 9 | 平台 | P |
+------+------------+------+
9 rows in set (0.00 sec)mysql>
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 base_code where hz_code>=base_code.hz1 and hz_code<=base_code.hz2;
return hz_py;
END$$DELIMITER ;$$
如果数据库编码是utf8,又怎么实现呢
utf8该怎么解决