+ -
当前位置:首页 → 问答吧 → 一个关于SQL SERVER2005 代码值转换函数的问题

一个关于SQL SERVER2005 代码值转换函数的问题

时间:2011-11-07

来源:互联网

function [dbo].[GET_CODENAME](@codeid varchar(100),@codetype varchar(100))
returns varchar(100)
as
begin
  declare @newstr varchar(100)
  declare @output varchar(100)
  declare @value varchar(100)
  declare @codename VARCHAR(100)
  declare @i int
  declare @n int
  set @newstr = @codeid
  set @output = ''
  set @n = 1
  set @i = Charindex(',',@newstr)
  while @i > 0
  begin  
  set @value = SUBSTRING (@newstr , @n , @i-@n)
  set @n = @i + 1
  set @i = charindex(',',@newstr,@n)
  set @newstr = @newstr+SUBSTRING ( @newstr , @i+1 , len(@newstr)-@i)
  end
  set @codename=''
  select @codename=@codename + ',' + codename from T_code where codetype=@codetype and codeid in(@newstr)
  if len(@codename)>= 1
  set @output = @codename --right(@codename,len(@codename)-1)  
  return @output
end 

传单个值可以转成想要的代码值,如果传数组返回值就为空?求高手帮忙...

作者: Q1293920990   发布时间: 2011-11-07

写法循环,完全没有意义

作者: roy_88   发布时间: 2011-11-07

测测看是不是这样效果
SQL code
create function [dbo].[GET_CODENAME](@codeid varchar(100),@codetype varchar(100))
returns varchar(100)
as
begin
  declare @newstr varchar(100)
  declare @output varchar(100)
  declare @value varchar(100)
  declare @codename VARCHAR(100)
  declare @i int
  declare @n int
  set @codename=''
  set @newstr = @codeid
  set @output = ''
  set @n = 1
  set @i = Charindex(',',@newstr)
  while @i > 0
  begin   
        set @value = SUBSTRING (@newstr , @n , @i-@n)
        set @n = @i + 1
        set @i = charindex(',',@newstr,@n)
        set @newstr = @newstr+SUBSTRING ( @newstr , @i+1 , len(@newstr)-@i)
        select @codename=@codename + ',' + codename from T_code where codetype=@codetype and codeid in(@value)
  end
  
  if @newstr>''
        set @codename=@codename+@newstr
  if len(@codename)>= 1
    set @output = @codename --right(@codename,len(@codename)-1)   
  return @output
end  

作者: roy_88   发布时间: 2011-11-07

应该是你判断和字符截取的问题吧

作者: ssp2009   发布时间: 2011-11-07

SQL SERVER 2005 里面有数组?

作者: maco_wang   发布时间: 2011-11-07

学习了

作者: yyantifa   发布时间: 2011-11-07

SQL code
Create function [dbo].[GET_CODENAME](@codeid varchar(100),@codetype varchar(100))
returns varchar(100)
as
begin

    declare @codename VARCHAR(100)
    select @codename=@codename + ',' + codename from T_code
    where codetype=@codetype and ','+@codeid+',' like   '%,'+RTRIM(codeid)+',%'  order by CHARINDEX(','+RTRIM(codeid)+',',','+@codeid+',')
  return stuff(@codename,1,1,'')
end  


改改,看看是不是这样的效果,简化一下你的写法

作者: roy_88   发布时间: 2011-11-07

楼主这是要做什么?

作者: fredrickhu   发布时间: 2011-11-07

引用 7 楼 fredrickhu 的回复:
楼主这是要做什么?

表A
AA BB CC
1 1 1,2,1
表B(代码表)
codetype typename codename codeid
sex 性别 男 1
sex 性别 女 2 
我想写个函数转换表A的CC字段为相应的codename;

作者: Q1293920990   发布时间: 2011-11-07

引用 8 楼 q1293920990 的回复:

引用 7 楼 fredrickhu 的回复:
楼主这是要做什么?

表A
AA BB CC
1 1 1,2,1
表B(代码表)
codetype typename codename codeid
sex 性别 男 1
sex 性别 女 2
我想写个函数转换表A的CC字段为相应的cod……


参照以上方法。

作者: roy_88   发布时间: 2011-11-07