目录
应用场景
举例
函数实现
小结
应用场景
在搜刮应用中,我们一样平常会提供一个搜刮框,输入关健字,点击查询按钮以获取效果数据。大部分环境我们会提供模糊查询的情势以在一个或多个字段举行搜刮以获取效果。这样可以简化用户的操作,扩大搜刮范围,为进步精度而提供基础范围数据。因此按汉字拼音搜刮,即可以进一步简化输入,又可以进一步扩大搜刮范围。
举例
假设有字典表,表名 sys_d,包括 ID 和 NAME 字段,我们要对 NAME 字段举行搜刮,如下图:
对于模糊搜刮,我们可以通过 like 来实现,比如我们想得到name字段中包罗“职称”的记录,如下图实行:
用拼音简码的情势,可以更加进一步的增加搜刮范围,并可以简化切换输入法的操作,比如输入 ZC,即可以找到字典表中的数据。 因此我们可以编写汉字转拼音的函数 GetPY 举行进一步操作,如下图:
在搜刮时,我们通过该函数举行了一次转化,以得到预期效果,另外通过在查询字段列表里举行转化验证,可以看到 PY 字段对应 NAME 的拼音简写转化。
函数实现
打开SQL SERVER 查询分析器,实行如下代码:
- create function [dbo].[GetPY](@str varchar(500))
- returns varchar(500)
- as
- begin
- declare @cyc int,@length int,@str1 varchar(100),@charcate varbinary(20)
- set @cyc=1--从第几个字开始取
- set @length=len(@str)--输入汉字的长度
- set @str1=''--用于存放返回值
- while @cyc<=@length
- begin
- select @charcate=cast(substring(@str,@cyc,1) as varbinary)--每次取出一个字并将其转变成二进制,便于与GBK编码表进行比较
- if @charcate>=0XB0A1 and @charcate<=0XB0C4
- set @str1=@str1+'A'--说明此汉字的首字母为A,以下同上
- else if @charcate>=0XB0C5 and @charcate<=0XB2C0
- set @str1=@str1+'B'
- else if @charcate>=0XB2C1 and @charcate<=0XB4ED
- set @str1=@str1+'C'
- else if @charcate>=0XB4EE and @charcate<=0XB6E9
- set @str1=@str1+'D'
- else if @charcate>=0XB6EA and @charcate<=0XB7A1
- set @str1=@str1+'E'
- else if @charcate>=0XB7A2 and @charcate<=0XB8C0
- set @str1=@str1+'F'
- else if @charcate>=0XB8C1 and @charcate<=0XB9FD
- set @str1=@str1+'G'
- else if @charcate>=0XB9FE and @charcate<=0XBBF6
- set @str1=@str1+'H'
- else if @charcate>=0XBBF7 and @charcate<=0XBFA5
- set @str1=@str1+'J'
- else if @charcate>=0XBFA6 and @charcate<=0XC0AB
- set @str1=@str1+'K'
- else if @charcate>=0XC0AC and @charcate<=0XC2E7
- set @str1=@str1+'L'
- else if @charcate>=0XC2E8 and @charcate<=0XC4C2
- set @str1=@str1+'M'
- else if @charcate>=0XC4C3 and @charcate<=0XC5B5
- set @str1=@str1+'N'
- else if @charcate>=0XC5B6 and @charcate<=0XC5BD
- set @str1=@str1+'O'
- else if @charcate>=0XC5BE and @charcate<=0XC6D9
- set @str1=@str1+'P'
- else if @charcate>=0XC6DA and @charcate<=0XC8BA
- set @str1=@str1+'Q'
- else if @charcate>=0XC8BB and @charcate<=0XC8F5
- set @str1=@str1+'R'
- else if @charcate>=0XC8F6 and @charcate<=0XCBF9
- set @str1=@str1+'S'
- else if @charcate>=0XCBFA and @charcate<=0XCDD9
- set @str1=@str1+'T'
- else if @charcate>=0XCDDA and @charcate<=0XCEF3
- set @str1=@str1+'W'
- else if @charcate>=0XCEF4 and @charcate<=0XD1B8
- set @str1=@str1+'X'
- else if @charcate>=0XD1B9 and @charcate<=0XD4D0
- set @str1=@str1+'Y'
- else if @charcate>=0XD4D1 and @charcate<=0XD7F9
- set @str1=@str1+'Z'
- else
- set @str1 =@str1 + substring(@str,@cyc,1)
- set @str1= ltrim(rtrim(@str1 ))
- set @cyc=@cyc+1--取出输入汉字的下一个字
- end
- return @str1--返回输入汉字的首字母
- end
- GO
复制代码 GetPY函数必要传递 范例为varchar(500) 的字符串参数。
小结
以上代码基于 Microsoft SQL SERVER 2016 编写与实现。 实际的应用中,还要结合原始输入举行查询,可以利用或条件,拼音码做为辅助查询条件。另外,对于大数据量的表,可以接纳空间换时间的做法,增加字段,存储拼音简写值。可以通过在业务程序时,录入或修改功能实现,也可以通过触发器来实现。
以上观点仅供参考,欢迎大家指正,再次感谢您的阅读!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |