SQL Server 中获取字符串拼音的标量函数实现
IF OBJECT_ID(N'dbo.ufn_Pinyin', N'FN') IS NOT NULL
BEGIN
DROP FUNCTION dbo.ufn_Pinyin;
END
GO --==================================
-- 功能: 获取字符串的拼音
-- 说明: 针对中文汉字的多音字情况,可以在函数中增加多音字的字母匹配,缺点就是以后遇到该中文汉字不论其作出语境如何都会按照其多音字的字母匹配。
-- 作者: XXX
-- 创建: XXXX-XX-XX
-- 修改: XXX-XXX-XX XXX XXXXXXXX
-- 调用: SELECT dbo.ufn_Pinyin(N'中国') AS Pinyin;
--==================================
CREATE FUNCTION dbo.ufn_Pinyin
(
@chvnStr NVARCHAR() -- 字符串
) RETURNS NVARCHAR()
--$Encode$--
AS
BEGIN
-- NULL默认值处理
SET @chvnStr = ISNULL(@chvnStr, N''); -- 声明局部变量
DECLARE
@intLen AS INT,
@chvnPinyin AS NVARCHAR(),
@chnCharacter AS NCHAR();
-- 初始化局部变量
SELECT
@intLen = ,
@chvnPinyin = N'',
@chnCharacter = N''; -- 插入的字符串为空字符串则直接返回该函数
IF @chvnStr = N''
BEGIN
RETURN @chvnPinyin;
END -- 声明中文汉字的局部表变量
DECLARE @tblChineseCharacter TABLE (
ChineseCharacter NCHAR() COLLATE Chinese_PRC_CI_AS NOT NULL,
Letter NCHAR() NOT NULL
); -- 向中文汉字的局部表变量插入数据
INSERT INTO @tblChineseCharacter (ChineseCharacter, Letter)
SELECT N'吖', N'A' UNION ALL SELECT N'八', 'B' UNION ALL SELECT N'嚓', 'C' UNION ALL SELECT N'咑', N'D' UNION ALL
SELECT N'妸', N'E' UNION ALL SELECT N'发', 'F' UNION ALL SELECT N'旮', 'G' UNION ALL SELECT N'铪', N'H' UNION ALL
SELECT N'丌', N'J' UNION ALL SELECT N'咔', 'K' UNION ALL SELECT N'垃', 'L' UNION ALL SELECT N'嘸', N'M' UNION ALL
SELECT N'拏', N'N' UNION ALL SELECT N'噢', 'O' UNION ALL SELECT N'妑', 'P' UNION ALL SELECT N'七', N'Q' UNION ALL
SELECT N'呥', N'R' UNION ALL SELECT N'仨', 'S' UNION ALL SELECT N'他', 'T' UNION ALL SELECT N'屲', N'W' UNION ALL
SELECT N'夕', N'X' UNION ALL SELECT N'丫', 'Y' UNION ALL SELECT N'帀', 'Z' UNION ALL SELECT N'参', N'S' /*增加多音字的字母匹配*/; -- 获取字符串的长度
SET @intLen= LEN(@chvnStr); WHILE @intLen >= /*@intLen > 0*/
BEGIN
-- 从后往前逐次获取单个字符
SET @chnCharacter = SUBSTRING(@chvnStr, @intLen, ); -- 获取当前字符对应的字母
SELECT TOP @chvnPinyin = Letter + @chvnPinyin
FROM @tblChineseCharacter
WHERE ChineseCharacter <= @chnCharacter
ORDER BY ChineseCharacter DESC; -- 如果当前受影响的行数为0,则表示当前字符可能是中文外的其他字符,如英文字符等等
IF @@ROWCOUNT =
BEGIN
SET @chvnPinyin = SUBSTRING(@chvnStr, @intLen, ) + @chvnPinyin;
END -- 字符串长度局部变量递减
SET @intLen = @intLen - ;
END RETURN @chvnPinyin;
END
GO
演示该函数的效果,如下的T-SQL:
SELECT dbo.ufn_Pinyin(N'中国') AS ColName,dbo.ufn_Pinyin(N'中国ilove你') AS Col2Name, dbo.ufn_Pinyin(N'中国我爱你') AS Col3Name;
GO
执行的后的查询结果如下:

SQL Server 中获取字符串拼音的标量函数实现的更多相关文章
- SQL Server中截取字符串常用函数
SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...
- 在SQL SERVER中获取表中的第二条数据
在SQL SERVER中获取表中的第二条数据, 思路:先根据时间逆排序取出前2条数据作为一个临时表,再按顺时排序在临时表中取出第一条数据 sql语句如下: select top 1 * from(se ...
- SQL Server 中截取字符串常用的函数
SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...
- sql server中截取字符串的常用函数
我们如果要在sql server中,使用截取字符串的方法要怎样使用呢? sql server提供了3个常用截取字符串方法,LEFT().RIGHT().SUBSTRING() /****** Sql ...
- MS SQL Server中数据表、视图、函数/方法、存储过程是否存在判断及创建
前言 在操作数据库的时候经常会用到判断数据表.视图.函数/方法.存储过程是否存在,若存在,则需要删除后再重新创建.以下是MS SQL Server中的示例代码. 数据表(Table) 创建数据表的时候 ...
- SQL SERVER中获取表间主外键关系
sql server 2008中的主外键关系获取方式: 转自:http://www.cnblogs.com/ke10/archive/2012/06/11/2544655.html SELECT OB ...
- SQL Server中获取指定时间段内的所有日期
DECLARE @days INT, @date_start DATETIME = '2016-11-01', @date_end DATETIME = '2016-11-10' SET @days ...
- SQL server中获取语句执行时间
在写代码的时候,有时候实现一个功能会有好多个方法,有时候会做一下方法的耗时对比,综合下时间复杂度与空间复杂度,写出最好的代码: 同样,在写一些SQL查询,SQL代码的时候,也希望能写出一个高效一点的查 ...
- SQL Server中判断字符串出现的位置及字符串截取
首先建一张测试表: )); insert into teststring values ('张三,李四,王五,马六,萧十一,皇宫'); 1.判断字符串中某字符(字符串)出现的次数,第一次出现的位置最后 ...
随机推荐
- extern的用法
extern作为外部函数声明的用法: 1. 可以扩展函数的应用范围: 107.h #ifndef _107H_ #def _107H_ extern void func(); #endif 107.c ...
- MAC使用CocoaPods
前言,還是那句話,按照濤叔下面畫黃色的步驟順序執行就好了 使用CocoaPods兩種方式:使用之前安裝的插件&命令行. 一.利用插件 1.創建項目后添加CocoaPods 2.在文本框中輸入如 ...
- PHP内核探索之变量(3)- hash table
在PHP中,除了zval, 另一个比较重要的数据结构非hash table莫属,例如我们最常见的数组,在底层便是hash table.除了数组,在线程安全(TSRM).GC.资源管理.Global变量 ...
- 七个结构模式之装饰者模式(Decorator Pattern)
定义: 使用组合的方法,动态给一个类增加一些额外的功能,避免因为使用子类继承而导致类继承结构复杂.并且可以保持和被装饰者同一个抽象接口,从而使客户端透明. 结构图: Component:抽象构件类,定 ...
- mysql出错:Access denied for user 'root'@'localhost' (using password: YES)
网站链接mysql数据库的时候,连接不上,并报出错误:Access denied for user 'root'@'localhost' (using password:YES) 这是个相当恼火的问题 ...
- Android应用开发基础之十一:新特性
Fragment 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 生命周期方法跟Activity一致,可以理解把其为就是一个Activity 定义布局文件作为Fra ...
- Entity Framework 笔记(一)
Entity Framework概述 EF是一个对象关系映射(ORM)框架,允许开发人员使用特定于域的对象关系型数据,开发人员通常不需要编写大量的数据访问代码.使用EF,开发者可以利用LINQ进行查询 ...
- Ampersand.js - 模块化的 JS 应用程序开发框架
Ampersand.js 是一个高度模块化,松耦合,用于构建先进的 JavaScript 应用程序的框架.通过良好定义的方法,结合了一系列微小的 CommonJS 模块.条理清晰,没有多余的冗余代码. ...
- JavaScript语言精粹学习笔记
0.JavaScript的简单数据类型包括数字.字符创.布尔值(true/false).null和undefined值,其它值都是对象. 1.JavaScript只有一个数字类型,它在内部被表示为64 ...
- Condition的await-signal流程详解
转载请注明出处:http://blog.csdn.net/luonanqin 上一篇讲了ReentrantLock的lock-unlock流程,今天这篇讲讲Condition的await-signal ...