按拼音查中文字段,在线等

时间:2022-05-24 07:46:00
mysql中 pre_forum_forum 表中
id     name  
1      万达
2      星城
3      满城
...

现需:我要查出 name字段中首字母为w 的记录,怎么实现呀。

8 个解决方案

#1


没记错的话老大写过一个汉字和 拼音转换的函数的.但是在php处理,你得给数据库增加字段.将对照的拼音update.然后搜索这个新增加的字段。要mysql直接完成我看没戏...

#2


有人用mysql 中的hex写过,
hex怎么实现呀,

#3


学习,等待大鸟到来。

#4


用hex和唠叨给的那个实际是一样的,

原理是这样的: gb2312的一级汉字是按照拼音排序的,所以内码临近的汉字拼音相同,
于是根据一个内码段和拼音的对应表,就可以根据内码得到拼音。

当然限制就是只对gb2312的一级汉字有效。
另这样的查询必然是全表扫描。

所以,如果增加拼音字段是更好的方法,
当然你最好有一个更好版本的汉字转拼音工具。

#5


这个问题我也需要用到。查了很多资料,都出现了问题。
一个是网站比较流行的PHP的函数,测试了,很多字无法转。比如:深圳的圳、癈、等很多都无法转。
后来用到了字典表,就是先将文字创建成一个表,将每一个字都存储起来,用的时候到数据库里面去查。即使这样,能够识别所有的汉字了,但是还有一个问题没法解决。那就是多音字。

目前只能将就着用。

mysql中 pre_forum_forum 表中
id name   
1 万达
2 星城
3 满城

像你的这个表的话,还需要对应的一个字段:   pinyin 字段。将词语的拼音保留起来,建立起索引。这样大数据访问的时候才能达到最优化。

#6


这个恐怕在实际应用中很少吧,有什么用呢?当然,从技术角度去想,这样的问题是很现实的

#7


select * from pre_forum_forum f where 
hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'

#8


'A' => " hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'",
'B' => " hex( left( f.name, 1 ) ) >= 'B0C5' AND hex( left( f.name, 1 ) ) <= 'B2C0'",
'C' => " hex( left( f.name, 1 ) ) >= 'B2C1' AND hex( left( f.name, 1 ) ) <= 'B2C0'",
'D' => " hex( left( f.name, 1 ) ) >= 'B4EE' AND hex( left( f.name, 1 ) ) <= 'B6E9'",
'E' => " hex( left( f.name, 1 ) ) >= 'B6EA' AND hex( left( f.name, 1 ) ) <= 'B7A1'",
'F' => " hex( left( f.name, 1 ) ) >= 'B7A2' AND hex( left( f.name, 1 ) ) <= 'B8C0'",
'G' => " hex( left( f.name, 1 ) ) >= 'B8C1' AND hex( left( f.name, 1 ) ) <= 'B9FD'",
'H' => " hex( left( f.name, 1 ) ) >= 'B9EE' AND hex( left( f.name, 1 ) ) <= 'BBF6'",
'I' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BBF6'",
'J' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BFA5'",
'K' => " hex( left( f.name, 1 ) ) >= 'BFA6' AND hex( left( f.name, 1 ) ) <= 'C0AB'",
'L' => " hex( left( f.name, 1 ) ) >= 'C0AC' AND hex( left( f.name, 1 ) ) <= 'C2E7'",
'M' => " hex( left( f.name, 1 ) ) >= 'C2E8' AND hex( left( f.name, 1 ) ) <= 'C4C2'",
'N' => " hex( left( f.name, 1 ) ) >= 'C4C3' AND hex( left( f.name, 1 ) ) <= 'C5B5'",
'O' => " hex( left( f.name, 1 ) ) >= 'C5B6' AND hex( left( f.name, 1 ) ) <= 'C5BD'",
'P' => " hex( left( f.name, 1 ) ) >= 'C5BE' AND hex( left( f.name, 1 ) ) <= 'C6D9'",
'Q' => " hex( left( f.name, 1 ) ) >= 'C6DA' AND hex( left( f.name, 1 ) ) <= 'C8BA'",
'R' => " hex( left( f.name, 1 ) ) >= 'C8BB' AND hex( left( f.name, 1 ) ) <= 'C8F5'",
'S' => " hex( left( f.name, 1 ) ) >= 'C8F6' AND hex( left( f.name, 1 ) ) <= 'CBF9'",
'T' => " hex( left( f.name, 1 ) ) >= 'CBFA' AND hex( left( f.name, 1 ) ) <= 'CDD9'",
'U' => " hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'",
'V' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BFA5'",
'W' => " hex( left( f.name, 1 ) ) >= 'CDDA' AND hex( left( f.name, 1 ) ) <= 'CEF3'",
'X' => " hex( left( f.name, 1 ) ) >= 'CEF4' AND hex( left( f.name, 1 ) ) <= 'D1B8'",
'Y' => " hex( left( f.name, 1 ) ) >= 'D1B9' AND hex( left( f.name, 1 ) ) <= 'D4D0'",
'Z' => " hex( left( f.name, 1 ) ) >= 'D4D1' AND hex( left( f.name, 1 ) ) <= 'D7FD'",

#1


没记错的话老大写过一个汉字和 拼音转换的函数的.但是在php处理,你得给数据库增加字段.将对照的拼音update.然后搜索这个新增加的字段。要mysql直接完成我看没戏...

#2


有人用mysql 中的hex写过,
hex怎么实现呀,

#3


学习,等待大鸟到来。

#4


用hex和唠叨给的那个实际是一样的,

原理是这样的: gb2312的一级汉字是按照拼音排序的,所以内码临近的汉字拼音相同,
于是根据一个内码段和拼音的对应表,就可以根据内码得到拼音。

当然限制就是只对gb2312的一级汉字有效。
另这样的查询必然是全表扫描。

所以,如果增加拼音字段是更好的方法,
当然你最好有一个更好版本的汉字转拼音工具。

#5


这个问题我也需要用到。查了很多资料,都出现了问题。
一个是网站比较流行的PHP的函数,测试了,很多字无法转。比如:深圳的圳、癈、等很多都无法转。
后来用到了字典表,就是先将文字创建成一个表,将每一个字都存储起来,用的时候到数据库里面去查。即使这样,能够识别所有的汉字了,但是还有一个问题没法解决。那就是多音字。

目前只能将就着用。

mysql中 pre_forum_forum 表中
id name   
1 万达
2 星城
3 满城

像你的这个表的话,还需要对应的一个字段:   pinyin 字段。将词语的拼音保留起来,建立起索引。这样大数据访问的时候才能达到最优化。

#6


这个恐怕在实际应用中很少吧,有什么用呢?当然,从技术角度去想,这样的问题是很现实的

#7


select * from pre_forum_forum f where 
hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'

#8


'A' => " hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'",
'B' => " hex( left( f.name, 1 ) ) >= 'B0C5' AND hex( left( f.name, 1 ) ) <= 'B2C0'",
'C' => " hex( left( f.name, 1 ) ) >= 'B2C1' AND hex( left( f.name, 1 ) ) <= 'B2C0'",
'D' => " hex( left( f.name, 1 ) ) >= 'B4EE' AND hex( left( f.name, 1 ) ) <= 'B6E9'",
'E' => " hex( left( f.name, 1 ) ) >= 'B6EA' AND hex( left( f.name, 1 ) ) <= 'B7A1'",
'F' => " hex( left( f.name, 1 ) ) >= 'B7A2' AND hex( left( f.name, 1 ) ) <= 'B8C0'",
'G' => " hex( left( f.name, 1 ) ) >= 'B8C1' AND hex( left( f.name, 1 ) ) <= 'B9FD'",
'H' => " hex( left( f.name, 1 ) ) >= 'B9EE' AND hex( left( f.name, 1 ) ) <= 'BBF6'",
'I' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BBF6'",
'J' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BFA5'",
'K' => " hex( left( f.name, 1 ) ) >= 'BFA6' AND hex( left( f.name, 1 ) ) <= 'C0AB'",
'L' => " hex( left( f.name, 1 ) ) >= 'C0AC' AND hex( left( f.name, 1 ) ) <= 'C2E7'",
'M' => " hex( left( f.name, 1 ) ) >= 'C2E8' AND hex( left( f.name, 1 ) ) <= 'C4C2'",
'N' => " hex( left( f.name, 1 ) ) >= 'C4C3' AND hex( left( f.name, 1 ) ) <= 'C5B5'",
'O' => " hex( left( f.name, 1 ) ) >= 'C5B6' AND hex( left( f.name, 1 ) ) <= 'C5BD'",
'P' => " hex( left( f.name, 1 ) ) >= 'C5BE' AND hex( left( f.name, 1 ) ) <= 'C6D9'",
'Q' => " hex( left( f.name, 1 ) ) >= 'C6DA' AND hex( left( f.name, 1 ) ) <= 'C8BA'",
'R' => " hex( left( f.name, 1 ) ) >= 'C8BB' AND hex( left( f.name, 1 ) ) <= 'C8F5'",
'S' => " hex( left( f.name, 1 ) ) >= 'C8F6' AND hex( left( f.name, 1 ) ) <= 'CBF9'",
'T' => " hex( left( f.name, 1 ) ) >= 'CBFA' AND hex( left( f.name, 1 ) ) <= 'CDD9'",
'U' => " hex( left( f.name, 1 ) ) >= 'B0A1' AND hex( left( f.name, 1 ) ) <= 'B0C4'",
'V' => " hex( left( f.name, 1 ) ) >= 'BBF7' AND hex( left( f.name, 1 ) ) <= 'BFA5'",
'W' => " hex( left( f.name, 1 ) ) >= 'CDDA' AND hex( left( f.name, 1 ) ) <= 'CEF3'",
'X' => " hex( left( f.name, 1 ) ) >= 'CEF4' AND hex( left( f.name, 1 ) ) <= 'D1B8'",
'Y' => " hex( left( f.name, 1 ) ) >= 'D1B9' AND hex( left( f.name, 1 ) ) <= 'D4D0'",
'Z' => " hex( left( f.name, 1 ) ) >= 'D4D1' AND hex( left( f.name, 1 ) ) <= 'D7FD'",