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 获取汉字的拼音首字母

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 获取名字拼音的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 获取汉字的拼音首字母

C#中如何获取汉字的笔画数和汉字的拼音

mysql获取字段拼音各首字母的问题

sql自动生成汉语拼音和首字母函数

mysql数据库,获取某一个汉字的拼音的首字母。怎么整?

JS实现获取汉字首字母拼音全拼音及混拼音的方法