基于Microsoft SQL Server实现编写汉字转拼音函数

 更新时间:2024年03月12日 09:17:58   作者:初九之潜龙勿用  
在搜索应用中,我们一般会提供一个搜索框,输入关健字,点击查询按钮以获取结果数据,大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果,本文给大家就介绍了基于Microsoft SQL Server实现编写汉字转拼音函数,需要的朋友可以参考下

应用场景

在搜索应用中,我们一般会提供一个搜索框,输入关健字,点击查询按钮以获取结果数据。大部分情况我们会提供模糊查询的形式以在一个或多个字段进行搜索以获取结果。这样可以简化用户的操作,扩大搜索范围,为提高精度而提供基础范围数据。因此按汉字拼音搜索,即可以进一步简化输入,又可以进一步扩大搜索范围。

举例

假设有字典表,表名 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 编写与实现。 实际的应用中,还要结合原始输入进行查询,可以使用或条件,拼音码做为辅助查询条件。另外,对于大数据量的表,可以采用空间换时间的做法,增加字段,存储拼音简写值。可以通过在业务程序时,录入或修改功能实现,也可以通过触发器来实现。

以上就是基于Microsoft SQL Server实现编写汉字转拼音函数的详细内容,更多关于SQL Server汉字转拼音的资料请关注脚本之家其它相关文章!

相关文章

  • SQL Server时间戳功能与用法详解

    SQL Server时间戳功能与用法详解

    这篇文章主要介绍了SQL Server时间戳功能与用法,结合实例形式分析了时间戳的概念、SQL Server时间戳的使用方法与相关注意事项,需要的朋友可以参考下
    2016-06-06
  • SQLSERVER聚集索引和主键(Primary Key)的误区认识

    SQLSERVER聚集索引和主键(Primary Key)的误区认识

    很多人会把Primary Key和聚集索引搞混起来,或者认为这是同一个东西。这个概念是非常错误的,本文将带你理清思路,感兴趣的你可不要错过了哈,或许本文对你有所帮助
    2013-02-02
  • SQL Server数据库连接查询和子查询实战案例

    SQL Server数据库连接查询和子查询实战案例

    子查询(嵌套查询)子查询也称嵌套查询,是指一个SELECT查询语句可以嵌入另一个SELECT查询语句之中,下面这篇文章主要给大家介绍了关于SQL Server数据库连接查询和子查询的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • SQLSERVER记录登录用户的登录时间(自写脚本)

    SQLSERVER记录登录用户的登录时间(自写脚本)

    下面是本人写的一个脚本,我的实现原理是使用触发器,触发器是登录触发器,范围是整个服务器范围,如果有人登录过,就使用 bcp命令把登录信息记录日志文件,感兴趣的朋友可以了解下,或许本文的知识点对你有所帮助
    2013-02-02
  • SQL Server误区30日谈 第12天 TempDB的文件数和需要和CPU数目保持一致

    SQL Server误区30日谈 第12天 TempDB的文件数和需要和CPU数目保持一致

    TempDB的文件没有必要分布在多个存储器之间。如果你看到PAGELATCH类型的等待,即使你进行了分布也不会改善性能,而如果PAGEIOLATCH型的等待,或许你需要多个存储器,但这也不是必然-有可能你需要讲整个TempDB迁移到另一个存储系统,而不是仅仅为TempDB增加一个文件
    2013-01-01
  • SQLServer中的触发器基本语法与作用

    SQLServer中的触发器基本语法与作用

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。本文给大家介绍SQLServer中的触发器基本语法与作用,感兴趣的朋友一起学习吧
    2016-04-04
  • SQL Server 数据库的设计详解

    SQL Server 数据库的设计详解

    这篇文章主要为大家介绍了SQLServer数据库的设计,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • SQLServer 数据库变成单个用户后无法访问问题的解决方法

    SQLServer 数据库变成单个用户后无法访问问题的解决方法

    今天不知怎么点错了东西,SQLServer中的一个数据库变成单用户了,而且无法访问,下面是解决方法,有需要的朋友可以参考一下
    2013-10-10
  • 详解SQLServer和Oracle的分页查询

    详解SQLServer和Oracle的分页查询

    分页功能是我们的基本功,必须要牢固掌握。通过对分页算法的整理,希望对实现分页功能更得心应手了,需要的朋友可以参考下
    2015-09-09
  • 数据库复制性能测试 推送模式性能测试

    数据库复制性能测试 推送模式性能测试

    使用了数据库复制的人,首先担心的就是主服务器和备份服务器的性能消耗问题,本人也是对此十分担忧,查了半天,基本上没发现类似的测试说明,就自己测试了一下,下面为测试的结果,仅供参考
    2012-06-06

最新评论