日期:2014-05-18  浏览次数:20568 次

求一个根据时间间隔,返回以逗号分割的id字符串的sql函数:
求一个根据时间间隔,返回以逗号分割的id字符串的sql函数:
TableA  
AID strBID
A1 NULL
A2 ,B1,B3,
A3 ,B1,B2,
A4 ,B1,B4,


TableB
BID UpdateTime
B1 20120130
B2 20120131
B3 20120201
B4 20120202

求一个sql 函数:
Function aa(@number int) --@number 是一个参数,指定和当前日期(GETDATE() )的间  
  隔.如2(表示和当前日期的间隔是两天)
  return nvarchar(1000) --返回符合条件的TableA中AID的逗号分割字符串如 'A3,A4'
时间间隔要按TableA中strBID指定的BID对应的时间中最近的日期(如A3列对应,B1,B2,B3,中,B3代表的时间为最近时间)和当前时间的间隔.


如果当前日期为:20120203
  调用函数aa(2) 应该返回: 'A2,A4'
 

------解决方案--------------------
SQL code

go
create table TableA (AID varchar(2),strBID varchar(9))
insert into TableA
select 'A1',null union all
select 'A2',',B1,B3,' union all
select 'A3',',B1,B2,' union all
select 'A4',',B1,B4,'
go
create table TableB (BID varchar(2),UpdateTime datetime)
insert into TableB
select 'B1','20120130' union all
select 'B2','20120131' union all
select 'B3','20120201' union all
select 'B4','20120202'
go
create function aa(@num int)
returns varchar(100)
as
begin
    declare @sql varchar(100) set @sql=''
    --设置当前日期,正常getdate()即可
    declare @t datetime  set @t='20120203'
    select @sql=@sql+AID+',' from TableA a left join TableB b on charindex(','+BID+',',strBID)>0
    where b.UpdateTime between dateadd(d,-@num,@t) and @t
    select @sql=left(@sql,len(@sql)-1)
    return @sql
end

select dbo.aa(2)
/*
A2,A4
*/