获取一个月的每个第二个星期二的日期
答
的一部分,这是你可以找到所有“第二星期二”于2013年
select
dateadd(day, 8, datediff(day, 1, dateadd(month, n, '2013-01-07'))/7 * 7) date
from
(values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)) t(n)
答
不知道什么实际所需的输入和输出,我能给你此刻是用于识别日期为每月的第二个星期二谓词:
DATEPART(day,@Date) between 8 and 14 and --Find the second one in the month
DATEPART(weekday,@Date) = DATEPART(weekday,'20130319') --Make sure its a Tuesday
(我用的是固定的,已知周二以避免必须知道什么DATEFIRST
设置有效运行查询时)
此找到合适的星期二当月,但显然@Date
可以设置为任何利益日期:
declare @Date datetime
set @Date = CURRENT_TIMESTAMP
;with Numbers as (select n from (values (0),(1),(2),(3),(4),(5),(6)) t(n)),
PotentialDates as (select DATEADD(day,n,DATEADD(month,DATEDIFF(month,'20010101',@Date),'20010108')) as Date
from Numbers
)
select * from PotentialDates where DATEPART(weekday,Date) = DATEPART(weekday,'20130319')
(并希望也很明显,查询可能是一个较大查询的一部分,其中@Date
是不是列的值,所以这可以形成基于集合的方式来工作的整片)
+0
谢谢达米恩,这有帮助! – DaFunkyAlex 2013-03-22 07:48:09
答
这段代码会给你每个第一个和第三个星期日的月..所以与SQL的欢呼:-)
declare @dt datetime
select @dt = '12/01/2014'
select dateadd(mm,datediff(mm,'',@dt),'') - datepart(dw,dateadd(mm,datediff(mm,'',@dt),'')+0)+ 8
select dateadd(mm,datediff(mm,'',@dt),'') - datepart(dw,dateadd(mm,datediff(mm,'',@dt),'')+0)+ 22
你有什么作为输入,或者你想要的输出是什么?你是否给我们一个'datetime'值,我们必须从同一个月中找到相关的日期?或者你想要一个包含所有这些日期的表格吗? – 2013-03-22 07:40:52
输出应该是** 2013-03-12 **,我想循环一年中的任何月份 - 它对于报告是动态的。 – DaFunkyAlex 2013-03-22 07:43:00
我已更新我的答案,以查找当月的第二个星期二。但请注意,我们通常不会尝试在SQL中编写* loops * - 我们试图找到一个*基于集合的方法 - 告诉SQL Server最终结果集的形状并让* it *计算出如何计算它) – 2013-03-22 07:53:53