公告
财富商城
积分规则
提问
发文
2019-01-08 00:47发布
该账号已被封号
I'm trying to figure out how to calculate the number of "Tuesdays" between two dates in TSQL?
"Tuesday"could be any value.
@t-clausen.dk & Andriy M as response to t-clausen.dks response and comments
The query uses the fact that 1900-01-01 was a monday. And 1900-01-01 is the date 0.
select dateadd(day,0,0)
The second parameter into the datediff-function is the startdate.
datediff
So you are comparing '1899-12-26' with your @to-date and '1899-12-26' is a tuesday
select datename(dw,dateadd(day, 0, -6)), datename(dw, '1899-12-26')
Same thing about the second date that uses the same fact.
As a matter of fact you can compare with any known tuesday and corresponding wednesday (that isnt in the date interval you are investigating).
declare @from datetime= '2011-09-19' declare @to datetime = '2011-10-15' select datediff(day, '2011-09-13', @to)/7-datediff(day, '2011-09-14', @from)/7 as [works] ,datediff(day, '2011-10-18', @to)/7-datediff(day, '2011-10-19', @from)/7 as [works too] ,datediff(day, '2011-09-27', @to)/7-datediff(day, '2011-09-28', @from)/7 as [dont work]
Basically the algorithm is "All Tuesdays minus all Wednesdays".
Check out this question: Count work days between two dates
There are a few ways you can leverage the answer to that question for yours as well.
declare @from datetime= '9/20/2011' declare @to datetime = '9/28/2011' select datediff(day, -6, @to)/7-datediff(day, -5, @from)/7
Thank you t-clausen.dk, Saved me few days. To get no of instances of each day:
declare @from datetime= '3/1/2013' declare @to datetime = '3/31/2013' select datediff(day, -7, @to)/7-datediff(day, -6, @from)/7 AS MON, datediff(day, -6, @to)/7-datediff(day, -5, @from)/7 AS TUE, datediff(day, -5, @to)/7-datediff(day, -4, @from)/7 AS WED, datediff(day, -4, @to)/7-datediff(day, -3, @from)/7 AS THU, datediff(day, -3, @to)/7-datediff(day, -2, @from)/7 AS FRI, datediff(day, -2, @to)/7-datediff(day, -1, @from)/7 AS SAT, datediff(day, -1, @to)/7-datediff(day, 0, @from)/7 AS SUN
最多设置5个标签!
@t-clausen.dk & Andriy M as response to t-clausen.dks response and comments
The query uses the fact that 1900-01-01 was a monday. And 1900-01-01 is the date 0.
select dateadd(day,0,0)
The second parameter into the
datediff
-function is the startdate.So you are comparing '1899-12-26' with your @to-date and '1899-12-26' is a tuesday
select datename(dw,dateadd(day, 0, -6)), datename(dw, '1899-12-26')
Same thing about the second date that uses the same fact.
As a matter of fact you can compare with any known tuesday and corresponding wednesday (that isnt in the date interval you are investigating).
Basically the algorithm is "All Tuesdays minus all Wednesdays".
Check out this question: Count work days between two dates
There are a few ways you can leverage the answer to that question for yours as well.
Thank you t-clausen.dk, Saved me few days. To get no of instances of each day: