/*-1.-獲得漢字字符串的首字母
根據大力的貼子改成.將大力的兩個函數合並成了一個函數.
可以應用於助記碼的查詢
--轉載(最早見於j9988的發表,具體原作者不明)--*/
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fGetPy]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fGetPy]
Go
--創建取拼音函數
create function fGetPy(@Str varchar(500)='')
returns varchar(500)
as
begin
declare @strlen int,@return varchar(500),@ii int
declare @n int,@c char(1),@chn nchar(1)
select @strlen=len(@str),@return='',@ii=0
set @ii=0
while @ii<@strlen
begin
select @ii=@ii+1,@n=63,@chn=substring(@str,@ii,1)
if @chn>'z'
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='a'
set @return=@return+@c
end
return(@return)
end
go
--測試
select dbo.fgetpy('東莞市') as 東莞市,dbo.fgetpy('ab中c國人') as 中國人
--刪除拼音函數
drop function fgetpy
/*2.--獲得漢字拼音的函數
需要創建一個拼音表,包含所有漢字的發音,這個可以通過轉換全拼輸入法的編碼庫得到,這里僅舉了一個簡單的例子.
--*/
--創建漢字拼音庫
create table YingShe(CHR char(2),PY varchar(10))
insert YingShe
select '長','chang'
union all select '長','zhang'
union all select '城','cheng'
union all select '科','kel'
union all select '技','ji'
union all select '金','jin'
union all select '立','li'
union all select '章','zhang'
union all select '公','gong'
union all select '司','si'
/*--下面是兩個函數,一個以表的形式返回某個字符串的全部拼音,一個返回某某個字符串的其中一個拼音
--*/
--獲取漢字拼音的函數--返回所有的拼音
create function f_getpy_tb(@str varchar(100))
returns @tb table(re varchar(8000))
as
begin
declare @re table(id int,re varchar(8000)) --數據處理中間表
declare @i int,@ilen int,@splitchr varchar(1)
select @splitchr=' ' --兩個拼音之間的分隔符(目的是為了通用性考慮)
,@i=1,@ilen=len(@str)
insert into @re select @i,py from YingShe where chr=substring(@str,@i,1)
while @i<@ilen
begin
set @i=@i+1
insert into @re select @i,re+@splitchr+py from @re a,YingShe b
where a.id=@i-1 and b.chr=substring(@str,@i,1)
end
insert into @tb select re from @re where id=@i
return
end
go
--獲取漢字拼音的函數--返回漢字的某一個拼音
create function f_getpy(@str varchar(100))
returns varchar(8000)
as
begin
declare @re varchar(8000)
declare @i int,@ilen int,@splitchr varchar(1)
select @splitchr=' ' --兩個拼音之間的分隔符(目的是為了通用性考慮)
,@i=1,@ilen=len(@str)
select @re=py from YingShe where chr=substring(@str,@i,1)
while @i<@ilen
begin
set @i=@i+1
select top 1 @re=@re+@splitchr+py
from YingShe where chr=substring(@str,@i,1)
end
return(@re)
end
go
--測試
--返回'長城'的所有可能拼音
select * from dbo.f_getpy_tb('長城')
--返回'長城'的拼音
select dbo.f_getpy('長城')
--刪除拼音函數
drop function f_getpy,f_getpy_tb