if exists (select * from sysobjects where id = object_id(N‘[fn_ChineseToSpell]‘) and xtype in (N‘FN‘, N‘IF‘, N‘TF‘))
drop function [fn_ChineseToSpell]
GO
/*创建取拼音首字母函数*/
create function [dbo].[fn_ChineseToSpell](@strChinese varchar(500)=‘‘)
returns varchar(500)
as
begin /*函数实现开始*/
declare @strLen int,@return varchar(500),@i int
declare @n int,@c char(1),@chn nchar(1)
select @strLen=len(@strChinese),@return=‘‘,@i=0
while @i<@strLen
begin /*while循环开始*/
select @i=@i+1,@n=63,@chn=substring(@strChinese,@i,1)
if @chn>‘z‘/*原理:“字符串排序以及ASCII码表”*/ select @n = @n +1,@c =case chn when @chn then char(@n) else @c end from(select top 27 * from (select chn = ‘吖‘ union all select ‘八‘ union all select ‘嚓‘ union all select ‘咑‘ union all select ‘妸‘ union all select ‘发‘ union all select ‘旮‘ union all select ‘铪‘ union all select ‘丌‘ /*because have no ‘i‘*/ union all select ‘丌‘ union all select ‘咔‘ union all select ‘垃‘ union all select ‘嘸‘ union all select ‘拏‘ union all select ‘噢‘ union all select ‘妑‘ union all select ‘七‘ union all select ‘呥‘ union all select ‘仨‘ union all select ‘他‘ union all select ‘屲‘ /*no ‘u‘*/ union all select ‘屲‘ /*no ‘v‘*/ union all select ‘屲‘ union all select ‘夕‘ union all select ‘丫‘ union all select ‘帀‘ union all select @chn) as a order by chn COLLATE Chinese_PRC_CI_AS ) as b else
set @c=@chn
set @return=@return+@c
end /*while循环结束*/
return(@return)
end /*函数实现结束*/
使用方式:
select dbo.[fn_ChineseToSpell](‘魏保光‘)
SQL 获取名字拼音
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 获取名字拼音相关的知识,希望对你有一定的参考价值。
遇到一个SQL问题,希望能从百度知道得到一点帮助。
现在有这样的表,根据name得到value的值。
获取名字的拼音规则:张三获取得到的拼音为szhang,即名字取首字母,姓氏取全部字母;王麻子获得拼音为mzwang。
id name value
1 张三 szhang
2 李四 sli
3 王麻子 mzwang
拼音这一列本来是没有值,那个value是我加上去的。
现在就是要根据名字来得到这样规则的拼音。
获取任何汉字的首字母我已经实现了。
下面代码是晚上搜到的:
--取汉字首字母函数
create function f_GetPy(@str nvarchar(4000))
returns nvarchar(4000)
as
begin
declare @strlen int,@re nvarchar(4000)
declare @t table(chr nchar(1) collate Chinese_PRC_CI_AS,letter nchar(1))
insert into @t(chr,letter)
select '吖','A' union all select '八','B' union all
select '嚓','C' union all select '咑','D' union all
select '妸','E' union all select '发','F' union all
select '旮','G' union all select '铪','H' union all
select '丌','J' union all select '咔','K' union all
select '垃','L' union all select '呒','M' union all
select '拏','N' union all select '噢','O' union all
select '妑','P' union all select '七','Q' union all
select '呥','R' union all select '仨','S' union all
select '他','T' union all select '屲','W' union all
select '夕','X' union all select '丫','Y' union all
select '帀','Z'
select @strlen=len(@str),@re=''
while @strlen>0
begin
select top 1 @re=letter+@re,@strlen=@strlen-1
from @t a where chr<=substring(@str,@strlen,1)
order by chr desc
if @@rowcount=0
select @re=substring(@str,@strlen,1)+@re,@strlen=@strlen-1
end
return(@re)
end
go
--使用
select id,name,dbo.f_GetPy(name) from mytable
取完整拼音的跟上述f_GetPy函数类似,只是临时表要多写很多行,拼音有多少种组合就写多少行,大概六七百行吧。你自己找找相关的其他语言转拼音全码的代码,实现方式是相通的。 参考技术A 你选中拼音的那个字段用模糊查询
比如
select * from 表名 where 拼音字段 like 'm/';
SQL Server 获取汉字的拼音首字母
以上是关于SQL 获取名字拼音的主要内容,如果未能解决你的问题,请参考以下文章