根据汉字的首字母生产拼音码进行查询

 

公司里原先的代码,实在没看懂。。。。

主要是在Sql中实现

USE [Xpos_refer_database] 
GO
/****** Object: UserDefinedFunction [dbo].[GetLetter] Script Date: 04/07/2012 09:22:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER function [dbo].[GetLetter](@str nvarchar(4000),@type int)
returns nvarchar(4000)
-- WITH ENCRYPTION
as
begin
declare @intLen int --長度
declare @strRet nvarchar(4000)--返回值
declare @temp nvarchar(100) --臨時變量
set @intLen = len(@str)
set @strRet = ''

declare @i int --臨時變量
select @i=1
while (@intLen > 0 and @type>0)
begin
set @temp = ''
select @temp = case
when substring(@str,@i,1) > = '' then 'Z'
when substring(@str,@i,1) > = '' then 'Y'
when substring(@str,@i,1) > = '' then 'X'
when substring(@str,@i,1) > = '' then 'W'
when substring(@str,@i,1) > = '' then 'T'
when substring(@str,@i,1) > = '' then 'S'
when substring(@str,@i,1) > = '' then 'R'
when substring(@str,@i,1) > = '' then 'Q'
when substring(@str,@i,1) > = '' then 'P'
when substring(@str,@i,1) > = '' then 'O'
when substring(@str,@i,1) > = '' then 'N'
when substring(@str,@i,1) > = '' then 'M'
when substring(@str,@i,1) > = '' then 'L'
when substring(@str,@i,1) > = '' then 'K'
when substring(@str,@i,1) > = '' then 'J'
when substring(@str,@i,1) > = '' then 'H'
when substring(@str,@i,1) > = '' then 'G'
when substring(@str,@i,1) > = '' then 'F'
when substring(@str,@i,1) > = '' then 'E'
when substring(@str,@i,1) > = '' then 'D'
when substring(@str,@i,1) > = '' then 'C'
when substring(@str,@i,1) > = '' then 'B'
when substring(@str,@i,1) > = '' then 'A'
else rtrim(ltrim(substring(@str,@i,1)))
end

--对于汉字特殊字符,不生成拼音码
if (ascii(@temp)> 127) set @temp = ' '
--对于英文中小括号,不生成拼音码
if @temp = '(' or @temp = ')' set @temp = ' '
select @strRet = @strRet +@temp
set @intLen = @intLen - 1
if @type<=10 set @type=@type-1
set @i=@i+1
end--while

return lower(@strRet)
end

这个函数是在Sql中“标量值函数”下面的

查询的Sql语句:

select distinct D_CITY as 城市,upper(dbo.GetLetter(D_CITY,1)) as 拼音码 from ref_addr3 order by upper(dbo.GetLetter(D_CITY,1))

查询结果:

转载于:https://www.cnblogs.com/New-world/archive/2012/04/07/2435668.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值