首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求SQL获取拼音首字母函数,该如何解决

2012-01-19 
求SQL获取拼音首字母函数1,汉字返回大写拼音首字母2,英文返回大写首字母3,数字返回第一个数字4,其他文字及

求SQL获取拼音首字母函数
1,汉字返回大写拼音首字母
2,   英文返回大写首字母
3,数字返回第一个数字
4,其他文字及符号返回“*”号

[解决办法]
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 * from a order by case Name when '其他 ' then 1 else 0 end,dbo.f_GetPy(Name)

[解决办法]
其他情况自己处理一下。
[解决办法]
猛人啊
[解决办法]
牛人,學習一下
[解决办法]
--1. 按拼音排序
DECLARE @t TABLE(col varchar(2))
INSERT @t SELECT '中 '
UNION ALL SELECT '国 '
UNION ALL SELECT '人 '

SELECT * FROM @t ORDER BY col COLLATE Chinese_PRC_CS_AS_KS_WS
/*--结果
col
----



--*/
GO


/*==========================================*/


--2. 汉字首字母查询处理用户定义函数
CREATE FUNCTION f_GetPY(@str nvarchar(4000))
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @py TABLE(
ch char(1),
hz1 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS,
hz2 nchar(1) COLLATE Chinese_PRC_CS_AS_KS_WS)
INSERT @py SELECT 'A ',N '吖 ',N '鏊 '
UNION ALL SELECT 'B ',N '八 ',N '簿 '
UNION ALL SELECT 'C ',N '嚓 ',N '错 '
UNION ALL SELECT 'D ',N '哒 ',N '跺 '
UNION ALL SELECT 'E ',N '屙 ',N '贰 '
UNION ALL SELECT 'F ',N '发 ',N '馥 '
UNION ALL SELECT 'G ',N '旮 ',N '过 '
UNION ALL SELECT 'H ',N '铪 ',N '蠖 '
UNION ALL SELECT 'J ',N '丌 ',N '竣 '
UNION ALL SELECT 'K ',N '咔 ',N '廓 '
UNION ALL SELECT 'L ',N '垃 ',N '雒 '
UNION ALL SELECT 'M ',N '妈 ',N '穆 '


UNION ALL SELECT 'N ',N '拿 ',N '糯 '
UNION ALL SELECT 'O ',N '噢 ',N '沤 '
UNION ALL SELECT 'P ',N '趴 ',N '曝 '
UNION ALL SELECT 'Q ',N '七 ',N '群 '
UNION ALL SELECT 'R ',N '蚺 ',N '箬 '
UNION ALL SELECT 'S ',N '仨 ',N '锁 '
UNION ALL SELECT 'T ',N '他 ',N '箨 '
UNION ALL SELECT 'W ',N '哇 ',N '鋈 '
UNION ALL SELECT 'X ',N '夕 ',N '蕈 '
UNION ALL SELECT 'Y ',N '丫 ',N '蕴 '
UNION ALL SELECT 'Z ',N '匝 ',N '做 '
DECLARE @i int
SET @i=PATINDEX( '%[吖-做]% ' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
WHILE @i> 0
SELECT @str=REPLACE(@str,SUBSTRING(@str,@i,1),ch)
,@i=PATINDEX( '%[吖-做]% ' COLLATE Chinese_PRC_CS_AS_KS_WS,@str)
FROM @py
WHERE SUBSTRING(@str,@i,1) BETWEEN hz1 AND hz2
RETURN(@str)
END
GO

[解决办法]
最后面写了调用方法:

--调用
select * from a order by case Name when '其他 ' then 1 else 0 end,dbo.f_GetPy(Name)

[解决办法]
--获取字符串拼音字头
--Pqs 2006-11-20
--@Char 输入的字符串
CREATE function dbo.GetPY (@Char varchar(100))
returns varchar(100) as
begin
--字符串长度返回数据遍历字符串位置遍历的字符
declare @i_Len int, @c_Return varchar(100), @i_pos int,@c varchar(2),@c_CN varchar(100)
--初始化数据
--set @str= '龙岂池中物 '
set @i_Len = len(@Char)
set @c_Return = ' '
set @i_pos = 0
--遍历字符串
while (@i_pos < @i_Len )
begin
set @i_pos = @i_pos + 1
set @c_CN = substring(@Char, @i_pos, 1)
if (@c_CN > 'z ' )
--中文处理,查询匹配
begin
set @c = case when @c_CN> = '帀 ' then 'Z ' when @c_CN> = '丫 ' and @c_CN < '帀 ' then 'Y ' when @c_CN> = '夕 ' and @c_CN < '丫 ' then 'X ' when @c_CN> = '屲 ' and @c_CN < '夕 ' then 'W '
when @c_CN> = '他 ' and @c_CN < '屲 ' then 'T ' when @c_CN> = '仨 ' and @c_CN < '他 ' then 'S ' when @c_CN> = '呥 ' and @c_CN < '仨 ' then 'R ' when @c_CN> = '七 ' and @c_CN < '呥 ' then 'Q '
when @c_CN> = '妑 ' and @c_CN < '七 ' then 'P ' when @c_CN> = '噢 ' and @c_CN < '妑 ' then 'O ' when @c_CN> = '拏 ' and @c_CN < '噢 ' then 'N ' when @c_CN> = '嘸 ' and @c_CN < '拏 ' then 'M '
when @c_CN> = '垃 ' and @c_CN < '嘸 ' then 'L ' when @c_CN> = '咔 ' and @c_CN < '垃 ' then 'K ' when @c_CN> = '丌 ' and @c_CN < '咔 ' then 'J ' when @c_CN> = '铪 ' and @c_CN < '丌 ' then 'H '
when @c_CN> = '旮 ' and @c_CN < '铪 ' then 'G ' when @c_CN> = '发 ' and @c_CN < '旮 ' then 'F ' when @c_CN> = '妸 ' and @c_CN < '发 ' then 'E ' when @c_CN> = '咑 ' and @c_CN < '妸 ' then 'D '
when @c_CN> = '嚓 ' and @c_CN < '咑 ' then 'C ' when @c_CN> = '八 ' and @c_CN < '嚓 ' then 'B ' when @c_CN> = '吖 ' and @c_CN < '八 ' then 'A ' Else ' ' End
-- select top 1 @c = Code from Code_PY where name <= @c_CN


end
else
begin
--过滤字符(除了字符、数字和 '. '外的所有字符)
if (@c_CN> = 'a ' or (@c_CN> = '0 ' and @c_CN <= '9 ') or @c_CN= '. ')
set @c=@c_CN
else
set @c= ' '
end

set @c_Return=@c_Return+isnull(@c , ' ')
end
return upper(@c_Return)
end


[解决办法]
上面这个过滤是根据特定的来做的,至于LZ的过滤自己来填加即可
[解决办法]
1,汉字返回大写拼音首字母
2, 英文返回大写首字母
3,数字返回第一个数字
4,其他文字及符号返回“*”号
还不是很确定,不妨列举些数据说明
[解决办法]
收藏好贴

[解决办法]
我是新建了一个表,从全拼码表中将所有汉字首字母取出来放进去,直接查询就行了,目前碰到的问题是多音字处理,只能使用默认的了,如果一定要自动,可以考虑用多音词组协助解决
[解决办法]
强人啊!!

热点排行