失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > PostgreSQL数据库sql查询如何获取汉字拼音首字母

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

时间:2022-05-30 10:22:52

相关推荐

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

一、前言

在实际开发过程中,经常会使用模糊查询,根据某个关键字模糊搜索,一般是 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;beginl=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查询如何获取汉字拼音首字母》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。