我有一个表每周三填充数据。所以我需要从上周三到最近周三发布这些数据。
例如:如果今天星期四(2013年6月6日),那么我需要从 29/05/2013 获取数据(即上个月的最后一个星期三,五月)至 05/06/2013 (昨天)
我试过了
select dateadd(dd,datediff(dd,0,'GetDate()')/7 * 7 + 2,0)
, 05/06/2013
select dateadd(wk,-1,datediff(dd,0,'GetDate()')/7 * 7 + 2)
, 29/05/2013
在代码中,dateadd(dd,datediff(dd,0,'GetDate()')/7 * 7
转到一周的第一天(在这种情况下是星期一),加上+2,它会给出星期三的日期。
问题除星期一外,代码工作正常。
例如:考虑下周一(即10/06/2013),
它将 05/06/2013 (昨天)的结果提供给 12/06/2013 (下周三)
相反,我需要 29/05/2013 (即上周三的上周)至 05/06/2013 (昨天)
任何想法?
答案 0 :(得分:4)
DECLARE @ActualDatePayable DATETIME,@LASTDateMonth DATETIME
SET @ActualDatePayable='02/01/2013'
SET @LASTDateMonth=DATEADD(d,-1,DATEADD(m,1,@ActualDatePayable))
SET @ActualDatePayable=(select MAX(date) AS LastWednesday from (
select dateadd(day,number,@ActualDatePayable) as date from master..spt_values
where type='p' and number < DAY(@LASTDateMonth) ) t
where datename(weekday,date) = 'Wednesday')
SELECT @ActualDatePayable