• Microsoft SQL Server 编写汉字转拼音函数


    应用场景

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

    函数实现

    打开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
     
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73

    调用

     SELECT TOP 10000 xf_madein,[Desc],dbo.GetPY(xf_madein) AS DDD,dbo.GetPY([Desc]) AS DDD222 FROM dbo.CNL_Label
    
    • 1
  • 相关阅读:
    redis安装(Windows和linux)
    vue3的新特性
    Java常用配置项和命令行
    Linux内核编译
    CentOS 7 安装CMake指定版本3.21.2
    探索JDK8新特性,Stream 流:构建流的多种方式
    马来西亚考虑对TikTok电商实施禁令:定价和数据隐私问题浮出水面
    ​构建“顶流”合作圈,这家车联网企业已提前入局“半决赛”
    【python笔记】datafram的时间动态可视化 pyecharts地图
    .360、.halo勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • 原文地址:https://blog.csdn.net/weixin_44837958/article/details/136803407