如何计算TSQL中两个日期之间的"星期二"数量?

Vos*_*ose 9 sql t-sql date

我想弄清楚如何计算TSQL中两个日期之间"星期二"的数量?

"星期二"可能是任何价值.

小智 15

谢谢t-clausen.dk,保存了几天.为了得到每天的实例:

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
Run Code Online (Sandbox Code Playgroud)


t-c*_*.dk 10

declare @from datetime= '9/20/2011' 
declare @to datetime  = '9/28/2011' 

select datediff(day, -6, @to)/7-datediff(day, -5, @from)/7
Run Code Online (Sandbox Code Playgroud)
  1. 在@from找到星期二之前的第一个星期一的一周.
  2. 找到@to后第一个星期一的一周
  3. 扣除周数


Joh*_*han 5

@t-clausen.dk 和 Andriy M 作为对t-clausen.dks 回复和评论的回应

该查询使用 1900-01-01 是星期一这一事实。1900-01-01 是日期 0。

select dateadd(day,0,0)

- 函数的第二个参数datediff是开始日期。

因此,您将“1899-12-26”与您的@to-date 进行比较,“1899-12-26”是星期二

select datename(dw,dateadd(day, 0, -6)), datename(dw, '1899-12-26')

第二次约会也使用相同的事实。

事实上,您可以与任何已知的星期二和相应的星期三(不在您正在调查的日期间隔内)进行比较。

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]
Run Code Online (Sandbox Code Playgroud)

基本上,该算法是“所有星期二减去所有星期三”。


Gib*_*ron 0

查看这个问题:计算两个日期之间的工作日

您也可以通过几种方法利用该问题的答案。

  • 这个问题的答案很难转化为这个问题。而且他们并不真正值得他们获得的所有积分。该问题的更好答案在这里:http://stackoverflow.com/questions/6704905/numbers-of-weekdays-in-a-date-range-in-tsql (3认同)