如何在sqlserver中实现oracle decode的功能,并写成一个函数

 我来答
育知同创教育
2016-03-19 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
解决思想:1.把输入参数按照逗号分割
2.实现decode功能

1.字符串分割函数
create function dbo.getstrofindex (@str varchar(1000),@index int =0)
returns varchar(1000)
as
begin
declare @str_return varchar(1000)
declare @start int
declare @next int
declare @location int
select @start =1
select @next =1
select @location = charindex(',',@str,@start)
while (@location <>0 and @index > @next )
begin
select @start = @location +1
select @location = charindex(',',@str,@start)
select @next [email==@next]=@next[/email] +1
end
if @location =0 select @location =len(@str)+1
select @str_return = substring(@str,@start,@location-@start)
if (@index <> @next ) select @str_return = ''
return @str_return
end

2.自定义decode函数
create function dbo.decode(@col_name varchar(100),@val varchar(1000))
returns varchar(1000)
as
begin
declare @Ind int
declare @i int
declare @Res varchar(1000)
set @Ind=0
set @i=1
set @Res=''
set @Ind=len(@val)-len(replace(@val,',',''))+1
Tab_loop:
if @i<@Ind
begin
if dbo.getstrofindex(@val,@i)=@col_name
begin
set @Res=dbo.getstrofindex(@val,@i+1)
end
else
begin
set @i=@i+2
goto Tab_loop
end
end
else
begin
if @Res=''
begin
set @Res=dbo.getstrofindex(@val,@Ind)
end
end
return @Res
end

3.测试
表名cs1
no xb xm
1 男 张三
2 男 李四
3 女 张三
4 NULL 李四

select *,dbo.decode(no,'1,a,2,b,c') from cs1 -------no字段,为1显示a,为2显示b,否则显示c

no xb xm val
1 男 张三 a
2 男 李四 b
3 女 张三 c
4 NULL 李四 c

select *,dbo.decode(xb,'男,M,女,W,N') as val from cs1 -------------xb字段,为男显示M,为女显示W,否则显示N

no xb xm val
1 男 张三 M
2 男 李四 M
3 女 张三 W
4 NULL 李四 N
一骑当后
推荐于2016-04-30 · 知道合伙人数码行家
一骑当后
知道合伙人数码行家
采纳数:40298 获赞数:306439
网络、设备维护、电路、弱电检测。

向TA提问 私信TA
展开全部
create function uf_decode(@argu varchar(999))
returns integer
as
begin
--对@argu进行分解
--使用动态SQL组织CASE语法结构
end
引用uf_decode时把参数以一个字符串的形式传入﹐
你再试试﹐如果不行﹐晚上我帮你写。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式