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)
ENDRETURN @PY
END
如果朋友们觉得以后可能会用到的话,欢迎转载,当然也可以推荐一下,谢谢。
PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好。
SQL标量值函数:返回汉字拼音首拼的更多相关文章
- 常用Sql 标量值函数
1.汉字拼音首字母 /****** Object: UserDefinedFunction [dbo].[fnGetHzPY] Script Date: 08/16/2018 09:04:47 Des ...
- sql标量值函数,将汉字转化为拼音,无音标
USE [db_Test]GO SET ANSI_NULLS ONGO SET QUOTED_IDENTIFIER ONGO create function [dbo].[fn_GetPinyin]( ...
- SQL函数取汉字拼音首字母
)='') ) as begin ), ) , ,) if @chn > 'z' if( @chn < '八' ) set @c = 'A' else if ( @chn < '嚓' ...
- SQL标量值函数:小写金额转大写
我们日常开发业务系统中,作为统计报表中,特别是财务报表,显示中文金额经常遇到. 转换大小写的方法有很多,以下是从数据库函数方面解决这一问题. 效果如图: 调用:SELECT dbo.[Fn_Conve ...
- sql中的表值函数与标量值函数区别与用法
通俗来讲: 听名字就知道区别了 表值函数返回的是一张表结果,就和一个select查询语句一样,只不过里面带入了参数或者很复杂:标量值函数返回的只是一个值 一 .表值函数又分为内联函数与多语句函数 (1 ...
- sqlserver 表值函数与标量值函数
除了在我们常用的程序开发中要用到函数外,在sql语句中也常用到函数,不论哪种,思想都没有变,都是为了封装,可复用. 创建的方法和整体结构都大体相同,都少不了函数名,函数的形参,返回值等这些. 一.表值 ...
- MySQL通过函数获取字符串汉字拼音首字母大写字符串
DELIMITER $$ DROP FUNCTION IF EXISTS `Fun_GetPY`$$ CREATE FUNCTION `HIS`.`Fun_GetPY` (in_string VARC ...
- SQL表值函数和标量值函数的区别
SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...
- sql 表值函数与标量值函数
写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量 ...
随机推荐
- 【leetcode刷题笔记】Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations ...
- 0521 HTML基础
一.web标准 web准备介绍: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web准备规范的分类:结构标准.表现标准.行为标准. 结构:html.表示: ...
- linux常见命令2
systemctl set-hostname HOSTNAME 在centos7上设置主机名,永久有效 curl -O -L http://www.gnu.org/software/gettext/ ...
- hdoj1001--Sum Problem
Problem Description Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).In this problem, y ...
- Hive- 表
在hive中表的类型:管理表和托管表(外部表). 内部表也称之为MANAGER_TABLE,默认存储在/user/hive/warehouse下,也可以通过location指定:删除表时,会删除表的数 ...
- Web前端理论知识记录
Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...
- 分享知识-快乐自己:N及分类(双重循环、递归)实现
实现多级分类: 1.双重 for 循环实现 N 及分类 /*** * 执行遍历 * * @param menus * 所有权限列表集合 * @param list * 指定角色查询到的 权限Id * ...
- 十八 Django框架,生成二维码
用Python来生成二维码,需要qrcode模块,qrcode模块依赖Image 模块,所以首先安装这两个模块 生成二维码保存图片在本地 import qrcode img = qrcode.make ...
- codeforces 651A A. Joysticks (模拟)
A. Joysticks time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- 【转】Lucas定理 & 逆元学习小结
(From:离殇灬孤狼) 这个Lucas定理是解决组合数的时候用的,当然是比较大的组合数了.比如C(1000000,50000)% mod,这个mod肯定是要取的,要不算出来真的是天文数字了. 对于一 ...