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函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的,区别是表值函数只能返回一个表,标量 ...
随机推荐
- [原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [原创]java WEB学习笔记11:HttpServlet(HttpServletRequest HttpServletRsponse) 以及关于 Servlet 小结
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- linux FAQ(zz)
1.Which is the command used to find the available shells in your Operating System Linux ? Ans : $ech ...
- 简化Hadoop命令
1. 安装客户端(通过端用户可以方便的和集群交互) 2. 简化Hadoop命令 修改~/.bashrcalias hadoop='/home/work/hadoop/client/hadoop-cli ...
- 算法(Algorithms)第4版 练习 2.1.27
package com.qiusongde; import edu.princeton.cs.algs4.StdOut; public class Exercise2127 { public stat ...
- An Assembly Language
BUFFER OVERFLOW 3 An Assembly Language Introduction Basic of x86 Architecture Assembly Language Comp ...
- 分治思想求解X的M次幂方
package main import ( "fmt" ) //递归形式分治求解 func power(x, m int) int { { } else { y := power( ...
- Eclipse debug neutron-server
1 首先停掉neutron-server kill neutron-server in screen by ctr-c q-svc 2 cp /usr/local/bin/neutron-server ...
- Java之泛型浅解
我觉得学习一个东西,首先得从概念上明白它大概是什么? “泛型”就是“参数化类型”,也就是是把类型当成了一种参数.之前我们看到得函数方法比如: public long add(int num1,int ...
- 【前端】【javascript】es6中的遍历器接口Iterator
好久没发文章啦-.-为了证明我还活着,我决定从笔记里面抓一篇还算不乱比较像文章的发出来... 这些笔记是我在学es6的时候断断续续记录的,最近会一份一份整理陆陆续续发出来,顺便也自己再看一遍.我学习e ...