简单的SELECT语句来获取任何月份的最后一个星期三

时间:2013-06-07 00:47:47

标签: sql sql-server sql-server-2008 tsql

我有一个表每周三填充数据。所以我需要从上周三到最近周三发布这些数据。

例如:如果今天星期四(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 (昨天)

任何想法?

1 个答案:

答案 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