oracle库sql根据拼音查汉字,根据拼音首字母模糊查询数据库中文字段

最近要实现根据传入的拼音首字母查询数据库里的中文字段,并且正常来讲都需要支持用户输入多个拼音首字母,例如想要查询"我的",那么用户就可以输入"wd",然后包含"我的"的数据库记录就都被模糊查询出来了。

话不多说,先贴代码再解释原理:

33507ef3d444

mysql函数

上图中函数的作用就是根据传入的中文字符串来获取对应的拼音首字母,例如传入"我的",那么函数将会给你返回"WD",我相信说到这儿很多同学就已经恍然大悟了,也就是说你把你要查询的字段用这个函数包起来当做查询条件,条件的值就是用户传过来的拼音首字母,好,我知道我这么说你们可能迷糊了,我们来写一条sql

select * from user where F_GETPY(user_name) like '%WD%'

完事了   就是这么简单

原理就是利用了gbk编码对中文的排序支持根据拼音首字母排序,函数中临时表就是记录了每个拼音首字母对应的中文汉字编码最小的汉字

计算机是0和1的世界,gbk编码的每一个汉字存入计算机中其实都是二进制数,然后根据gbk编码规则将这些二进制数转换成我们看到的中文汉字的,所以其实图中"chr<=tmp_str"比较的是gbk的数字编码,然后降序排序取最近的一个拼音首字母

不知道我讲的是否明白,但我已经尽力了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值