我们在写代码的时候,经常会遇到这样的问题,通过字母检索。就是字母A-Z,点击其中的一个字母,如:B,那么出来的数据应该是拼音以B开头的汉字,和以B开头的英文字母。
那么在不使用数据库存汉字字母的前提下,怎么实现呢(因为那种方法实在是太笨)。
先看看汉字的HASH值:
字母 | 起值 | 止值 |
A | 45217 | 45252 |
B | 45253 | 45760 |
C | 45761 | 46317 |
D | 46318 | 46825 |
E | 46826 | 47009 |
F | 47010 | 47296 |
G | 47297 | 47613 |
H | 47614 | 48118 |
J | 48119 | 49061 |
K | 49062 | 49323 |
L | 49324 | 49895 |
M | 49896 | 50370 |
N | 50371 | 50613 |
O | 50614 | 50621 |
P | 50622 | 50905 |
Q | 50906 | 51386 |
R | 51387 | 51445 |
S | 51446 | 52217 |
T | 52218 | 52697 |
W | 52698 | 52979 |
X | 52980 | 53688 |
Y | 53689 | 54480 |
Z | 54481 | 55289 |
使用方法:英文26个字母中除了i,u,v三个字母不能成为汉语拼音的首字母外,其它的字母都可以。如果我们需要查询结果集中以A或者其它字母开头的汉语,实现方法如下,譬如B:
select * from t_pvipuserinfo where CONV(HEX(left(CONVERT(username USING gbk),1)),16,10) between 45253 and 45760 or username like 'b%' or username like 'B%'
其中45253与45760分别为汉语拼音首字母以B开头的拼音编码的开始值与结束值。