今天遇到一个需求,客户要求在系统客户端选择客户的时候,可以用拼音首拼去快速过滤选择,此时我们在客户表里面加多一个拼音首拼字段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编写,格式效果可能不太好。

SQL标量值函数:返回汉字拼音首拼的更多相关文章

  1. 常用Sql 标量值函数

    1.汉字拼音首字母 /****** Object: UserDefinedFunction [dbo].[fnGetHzPY] Script Date: 08/16/2018 09:04:47 Des ...

  2. sql标量值函数,将汉字转化为拼音,无音标

    USE [db_Test]GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO create function [dbo].[fn_GetPinyin]( ...

  3. SQL函数取汉字拼音首字母

    )='') ) as begin ), ) , ,) if @chn > 'z' if( @chn < '八' ) set @c = 'A' else if ( @chn < '嚓' ...

  4. SQL标量值函数:小写金额转大写

    我们日常开发业务系统中,作为统计报表中,特别是财务报表,显示中文金额经常遇到. 转换大小写的方法有很多,以下是从数据库函数方面解决这一问题. 效果如图: 调用:SELECT dbo.[Fn_Conve ...

  5. sql中的表值函数与标量值函数区别与用法

    通俗来讲: 听名字就知道区别了 表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂:标量值函数返回的只是一个值 一 .表值函数又分为内联函数与多语句函数 (1 ...

  6. sqlserver 表值函数与标量值函数

    除了在我们常用的程序开发中要用到函数外,在sql语句中也常用到函数,不论哪种,思想都没有变,都是为了封装,可复用. 创建的方法和整体结构都大体相同,都少不了函数名,函数的形参,返回值等这些. 一.表值 ...

  7. MySQL通过函数获取字符串汉字拼音首字母大写字符串

    DELIMITER $$ DROP FUNCTION IF EXISTS `Fun_GetPY`$$ CREATE FUNCTION `HIS`.`Fun_GetPY` (in_string VARC ...

  8. SQL表值函数和标量值函数的区别

    SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...

  9. sql 表值函数与标量值函数

    写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量 ...

随机推荐

  1. [原创]关于设置linux中vim 显示行号

    1.更改所有账户配置 直接更改/etc/vimrc vim /etc/vimrc 在vimrc文件的最后添加 set nu 即可 wq退出. 这样,不论使用哪个账号登陆,vim打开后都显示行号 2.为 ...

  2. Python 3 mysql 表操作

    Python 3 mysql 表操作 表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段 id,name,qq,age称为字段,其余的,一行内容称为 ...

  3. Quota Management and Enforcement

    Neutron API中大多的resource都需要quota limits. Neutron API暴露出一个extension 来管理quota,Quota limits are enforced ...

  4. Linux课程---5、常用文件命令和目录命令(创建文件命令)

    Linux课程---5.常用文件命令和目录命令(创建文件命令) 一.总结 一句话总结: touch file1 1.管道符|有什么用? 将前一个命令的结果作为后一个命令的输入:比如查看文件前3行:ca ...

  5. Educational Codeforces Round 30D. Merge Sort

    归并排序的逆操作,每次二分时把第二段第一位与第一段最后一位开始往前第一个比它大的数交换位置 可以用归并排序验证答案对不对 #include<bits/stdc++.h> #define f ...

  6. php如何判断电脑访问还是手机访问?

    手机上网用户数量越来越大,如今各网站都推出了手机网站,电脑用户访问时直接访问电脑版网页,当用户通过手机访问网站时则跳自动跳转到手机版网页,下面给大家分享一段php中判断电脑访问还是手机访问的代码: & ...

  7. BEC listen and translation exercise 33

    In fact, if it is a really hot day, like the sort of weather we had last summer, you are advised to ...

  8. ajax stream 一边下载二进制数据一边处理

    最近有在做 stream 下载,并且边下载 stream 边处理功能.解析二进制的功能.最初参考了 flv.js 的 flv stream 下载处理功能,发现他并没有使用的 XMLHttpReques ...

  9. A唐纳德先生和假骰子(华师网络赛)

    Time limit per test: 1.0 seconds Memory limit: 256 megabytes 在进行某些桌游,例如 UNO 或者麻将的时候,常常会需要随机决定从谁开始.骰子 ...

  10. 【学习笔记-中国剩余定理】POJ1006 Biorhythms

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 139500   Accepted: 44772 Des ...