zoukankan      html  css  js  c++  java
  • SQL标量值函数:返回汉字拼音首拼

    今天遇到一个需求,客户要求在系统客户端选择客户的时候,可以用拼音首拼去快速过滤选择,此时我们在客户表里面加多一个拼音首拼字段CustPY来记录,字段加好了,我们要把所有客户名称的拼音简拼都更新到CustPY字段中。

    为此利用以下函数做了个批量更新

    执行语句:UPDATE  客户表 SET  CustPY=dbo.[Fn_GetPinYin](客户名称字段)

    这样就可以了。需要注意的是:多音字。例如 SELECT dbo.[Fn_GetPinYin]('重庆') 返回ZQ    谨此记录。

    -- =============================================
    -- 调用:SELECT dbo.[Fn_GetPinYin]('中国')
    -- Create date: 2015-01-06
    -- Description:    返回汉字拼音首拼
    -- =============================================
    CREATE  FUNCTION [dbo].[Fn_GetPinYin] (@str NVARCHAR(4000))
    RETURNS NVARCHAR(4000)
    AS
        BEGIN
            DECLARE @word NCHAR(1) ,
                @PY NVARCHAR(4000)

            SET @PY=''

            SET @str=REPLACE(@str, '(', '(')
            SET @str=REPLACE(@str, ')', ')')

            WHILE LEN(@str)>0
                BEGIN
                    SET @word=LEFT(@str, 1)

                    --如果非汉字字符,返回原字符
                    SET @PY=@PY+(CASE WHEN UNICODE(@word) BETWEEN 19968 AND 19968+20901 THEN (SELECT TOP 1
                                                                                                        PY
                                                                                              FROM      (SELECT 'A' AS PY ,
                                                                                                                N'驁' AS word
                                                                                                         UNION ALL
                                                                                                         SELECT 'B' ,
                                                                                                                N'簿'
                                                                                                         UNION ALL
                                                                                                         SELECT 'C' ,
                                                                                                                N'錯'
                                                                                                         UNION ALL
                                                                                                         SELECT 'D' ,
                                                                                                                N'鵽'
                                                                                                         UNION ALL
                                                                                                         SELECT 'E' ,
                                                                                                                N'樲'
                                                                                                         UNION ALL
                                                                                                         SELECT 'F' ,
                                                                                                                N'鰒'
                                                                                                         UNION ALL
                                                                                                         SELECT 'G' ,
                                                                                                                N'腂'
                                                                                                         UNION ALL
                                                                                                         SELECT 'H' ,
                                                                                                                N'夻'
                                                                                                         UNION ALL
                                                                                                         SELECT 'J' ,
                                                                                                                N'攈'
                                                                                                         UNION ALL
                                                                                                         SELECT 'K' ,
                                                                                                                N'穒'
                                                                                                         UNION ALL
                                                                                                         SELECT 'L' ,
                                                                                                                N'鱳'
                                                                                                         UNION ALL
                                                                                                         SELECT 'M' ,
                                                                                                                N'旀'
                                                                                                         UNION ALL
                                                                                                         SELECT 'N' ,
                                                                                                                N'桛'
                                                                                                         UNION ALL
                                                                                                         SELECT 'O' ,
                                                                                                                N'漚'
                                                                                                         UNION ALL
                                                                                                         SELECT 'P' ,
                                                                                                                N'曝'
                                                                                                         UNION ALL
                                                                                                         SELECT 'Q' ,
                                                                                                                N'囕'
                                                                                                         UNION ALL
                                                                                                         SELECT 'R' ,
                                                                                                                N'鶸'
                                                                                                         UNION ALL
                                                                                                         SELECT 'S' ,
                                                                                                                N'蜶'
                                                                                                         UNION ALL
                                                                                                         SELECT 'T' ,
                                                                                                                N'籜'
                                                                                                         UNION ALL
                                                                                                         SELECT 'W' ,
                                                                                                                N'鶩'
                                                                                                         UNION ALL
                                                                                                         SELECT 'X' ,
                                                                                                                N'鑂'
                                                                                                         UNION ALL
                                                                                                         SELECT 'Y' ,
                                                                                                                N'韻'
                                                                                                         UNION ALL
                                                                                                         SELECT 'Z' ,
                                                                                                                N'咗'
                                                                                                        ) T
                                                                                              WHERE     word>=@word COLLATE Chinese_PRC_CS_AS_KS_WS
                                                                                              ORDER BY  PY ASC
                                                                                             )
                                      ELSE @word
                                 END)
                    SET @str=RIGHT(@str, LEN(@str)-1)
                END

            RETURN @PY

        END

    如果朋友们觉得以后可能会用到的话,欢迎转载,当然也可以推荐一下,谢谢。

    PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好。

  • 相关阅读:
    LVS负载均衡
    Firewalld防火墙
    前端性能优化----yahoo前端性能团队总结的35条黄金定律
    如何做好工作?
    需求分析的故事——如何练就需求分析的火眼金晴?
    让技术人员看得懂的流程-----面向对象设计全流程概述
    关于RESTFul初步理解
    初步研究全文搜索的解决方案
    Artech的MVC4框架学习——第八章View的呈现
    Artech的MVC4框架学习——第七章Action的执行
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/4232920.html
Copyright © 2011-2022 走看看