一、前言

在实际开发过程中,经常会使用模糊查询,根据某个关键字模糊搜索,一般是 name like ‘%123%’ 这样查,但是如果某个关键字用户不记得呢,只知道首字母,又如何模糊查询呢?例如,查询 name like ‘%我是中国人%’,如何根据首字母 wszgr 模糊搜索出来呢?

二、创建自定义函数

因为系统自带的 like 查询已经无法满足这种场景的模糊搜索,那么这里需要用到自定义函数,将数据库中的某个字段的中文汉字转化为首字母,再根据字母去模糊搜索。

创建一个 自定义函数 CnFirstChar,作用为将中文字符串转化为首字母。


CREATE OR REPLACE FUNCTION CnFirstChar(s character varying)RETURNS character varying AS
$BODY$
declareretval character varying;c character varying;l integer;b bytea;  w integer;
begin
l=length(s);
retval='';
while l>0 loopc=left(s,1);b=convert_to(c,'GB18030')::bytea;if get_byte(b,0)<127 thenretval=retval || upper(c);elsif length(b)=2 thenbeginw=get_byte(b,0)*256+get_byte(b,1);--汉字GBK编码按拼音排序,按字符数来查找,基于概率来说,效率应该比这个强:)if w between 45217 and 45252 then --"A";45217;45252;35retval=retval || 'a';elsif w between 45253 and 45760 then --"B";45253;45760;507retval=retval || 'b';elsif w between 45761 and 46317 then --"C";45761;46317;556retval=retval || 'c';elsif w between 46318 and 46825 then --"D";46318;46825;507retval=retval || 'd';elsif w between 46826 and 47009 then--"E";46826;47009;183retval=retval || 'e';elsif w between 47010 and 47296 then--"F";47010;47296;286retval=retval || 'f';elsif w between 47297 and 47613 then --"G";47297;47613;316retval=retval || 'g';elsif w between 47614 and 48118 then --"H";47614;48118;504retval=retval || 'h';elsif w between 48119 and 49061 then --"J";48119;49061;942retval=retval || 'j';elsif w between 49062 and 49323 then--"K";49062;49323;261retval=retval || 'k';elsif w between 49324 and 49895 then --"L";49324;49895;571retval=retval || 'l';elsif w between 49896 and 50370 then --"M";49896;50370;474retval=retval || 'm';elsif w between 50371 and 50613 then --"N";50371;50613;242retval=retval || 'n';elsif w between 50614 and 50621 then --"O";50614;50621;7retval=retval || 'o';elsif w between 50622 and 50905 then--"P";50622;50905;283retval=retval || 'p';elsif w between 50906 and 51386 then --"Q";50906;51386;480retval=retval || 'q';elsif w between 51387 and 51445 then--"R";51387;51445;58retval=retval || 'r';elsif w between 51446 and 52216 then --"S";51446;52217;retval=retval || 's';elsif w between 52218 and 52697 then --"T";52218;52697;479retval=retval || 't';elsif w between 52698 and 52979 then--"W";52698;52979;281retval=retval || 'w';elsif w between 52980 and 53688 then --"X";52980;53688;retval=retval || 'x';elsif w between 53689 and 54480 then --"Y";53689;54480;791retval=retval || 'y';elsif w between 54481 and 55289 then --"Z";54481;55289;808retval=retval || 'z';end if;end;end if;s=substring(s,2,l-1);l=l-1;
end loop;
return retval;
end;
$BODY$LANGUAGE plpgsql IMMUTABLE;

三、sql模糊搜索使用自定义函数

上述自定义函数已经在 postgresql数据库中创建好了,那么sql查询时可以直接使用了。


select * from user  where CnFirstChar(user_name) like '%wszgr%';

PostgreSQL数据库sql查询如何获取汉字拼音首字母相关推荐

  1. Excel中如何获取汉字拼音首字母

    Excel中如何获取汉字拼音首字母 在工作中,为了方便查询.排序或者编码,需要生成汉字内容信息的首字母,如果信息很多的话,一个个录入是一件很麻烦的事情,下面给大家介绍一个便捷的方法,轻松获取汉字拼音首 ...

  2. 【C#】获取汉字拼音首字母和全拼

    文章目录 利用CJK统一表意符号获取首字母 获取首字母和全拼 另附sql server解决方案 来源 java的同学可以了解下pinyin4j,js可以了解ChinesePY.js 获取拼音的意义多在 ...

  3. 在delphi 7中实现获取汉字拼音首字母

    公司的餐饮系统出品的助记码,还没实现自动从出品名称获取汉字拼音首字母. 所以在网上找了三种解决方法, 一种是kaguo 的使用常用汉字拼音查找方法,这种代码十分简单,实现方便,但是这种代码仅仅是一级字 ...

  4. 在Excel中如何获取汉字拼音首字母?

    转自:https://jingyan.baidu.com/article/0a52e3f43c3f6abf63ed7259.html百度经验 在Excel中如何获取汉字拼音首字母?| 在工作中,为了方 ...

  5. C# 获取汉字拼音首字母

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西, ...

  6. php获取汉字的首字母,php获取汉字拼音首字母的方法

    现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序.这是中国人大多数使用的排序方法.那么在php程序中该如何操作呢? 下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的 ...

  7. iOS 获取汉字拼音首字母

    iOS获取汉字首字母 这个一般用在通讯里排序居多,我这里就是用到了通讯里的排序,然后就来mark一下,记录. 核心代码 char pinyinFirstLetter(unsigned short ha ...

  8. iOS获取汉字拼音首字母的方法

    iOS获取汉字拼音首字母的方法 之前在项目中需要根据昵称的首字母进行排序,蹚了几个坑,今天记录一下.其实iOS系统封装的就有获取汉字首字母的方法,但不推荐,想看最优解的同学直接略过: var name ...

  9. php获取拼音首字母排序,PHP获取汉字拼音首字母的方法

    PHP获取汉字拼音首字母的方法: function getfirstchar($s0){ $fchar = ord($s0{0}); if($fchar >= ord("A" ...

最新文章

  1. Java如何优雅的实现时间控制
  2. Linux vim多文件切换
  3. Duilib学习笔记《04》— 窗体显示
  4. 协程(Coroutine)与多线程,多进程
  5. 配置Xmanager 连接AIX服务器
  6. 你也被Spring的这个“线程池”坑过吗?
  7. POJ 3667 hotel(shǎ崽大神的模板|区间合并)
  8. Struts2-03-拦截器(BOS物流项目用户登录拦截)
  9. \t\t产后饮食标准 饮食原则 最适合新妈妈吃的菜 饮食秘诀 禁忌
  10. 制作u盘linux课程报告,定制U盘Linux系统总结报告-Linux文档类资源
  11. MySQL技术:数据库逻辑结构单元
  12. 迅雷链:DPoA 与 VRF
  13. Flink cdc 2.1.0发布测试
  14. SC16IS752调试
  15. 教育类型网站用户体验分析——以UMU学习平台、学生安全教育平台、师路南通为例...
  16. 白嫖我珍藏已久的在线小工具【第一弹】
  17. Unity实用小工具或脚本——智能包住任意多个物体的碰撞体
  18. 人工智能平台Gastrograph:利用数据探测口感,让食物更符合你的口味
  19. 三星S10 E配置曝光 侧面指纹+直面屏
  20. 汽车产业链平台盛世昊通纳斯达克上市,2022完美开局

热门文章

  1. 重学Elasticsearch第8章 : SpringBoot整合Jest客户端
  2. fastposter v2.9.2 最简海报生成器
  3. 「科聪分享」粗谈如何将林德L14改造成叉式搬运AGV
  4. Linux学习笔记(五)—— 文件系统操作与磁盘管理
  5. 影视后期制作学习(AE)(MG动画在视频部分)
  6. linux shell if字符串比较大小,linux中shell if 判断总结
  7. 新一轮的科技革命和产业变革
  8. 三峡再添“绿色明珠”,东岳庙数据中心背后的力量
  9. 【Docker三连问】什么是Docker? | Docker风靡原因? | 如何安装使用Docker?
  10. 游戏音乐制作不但要用音乐吸引玩家,还要突出游戏背景