求一个根据时间间隔,返回以逗号分割的id字符串的sql函数:
求一个根据时间间隔,返回以逗号分割的id字符串的sql函数:
TableA
AIDstrBID
A1NULL
A2,B1,B3,
A3,B1,B2,
A4,B1,B4,
TableB
BIDUpdateTime
B120120130
B220120131
B320120201
B420120202
求一个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'
[解决办法]
gocreate table TableA (AID varchar(2),strBID varchar(9))insert into TableAselect 'A1',null union allselect 'A2',',B1,B3,' union allselect 'A3',',B1,B2,' union allselect 'A4',',B1,B4,'gocreate table TableB (BID varchar(2),UpdateTime datetime)insert into TableBselect 'B1','20120130' union allselect 'B2','20120131' union allselect 'B3','20120201' union allselect 'B4','20120202'gocreate function aa(@num int)returns varchar(100)asbegin 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 @sqlendselect dbo.aa(2)/*A2,A4*/