如何计算SQL Server中一个月中有多少个星期天?

问题描述 投票:0回答:2

这里只有一个星期天,但我无法计算一个月中有多少个星期天:

select dateadd(dd, 8 - datepart(dw, '2019-11-01'), '2019-11-01')
sql-server count dayofweek days
2个回答
0
投票

很简单,因为WW在DATEDIFF中的工作方式(注意:startdate为非包容性,因此为-1)。

SELECT 
    DATEDIFF(ww, CAST('20081228' AS datetime)-1, '20090131') AS NumOfSundays

DATEDIFF(ww, @dt1-1, @dt2) 

获取一个月的开始和结束(在本例中为current_timestamp:):

SELECT 
     DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0) AS StartOfMonth
    ,EOMONTH(CURRENT_TIMESTAMP) AS EndOfMonth 

注意:WW不会返回整周数,但实际上它确实会返回星期日数(除非第一个日期是星期天)。

并且-1有效,因为DATETIME可转换为浮点数,其中整数部分是自1900/01/01开始的天数。逗号后面的部分是24小时的时间。

documentation of Access for Office 365,使用相同的datediff函数:

如果间隔为Week(“ ww”),则DateDiff函数返回两个日期之间的日历周数。它数数date1和date2之间的星期天数。如果DateDiff落在date2上,则将其计数在星期天;但它不算为date1,即使它确实落在了周日。


0
投票
DECLARE @MONTH as DATE = '20191225';   --any date in the month


;WITH THEMONTH AS (SELECT DATEADD(day,1 - DAY(@MONTH) , @MONTH) AS x
   UNION ALL
     SELECT DATEADD(day,1, x) FROM THEMONTH WHERE MONTH(DATEADD(day,1, x)) = MONTH(x))

             select count(*) from THEMONTH  WHERE  DATENAME(weekday, x)  ='sunday';

我通过减去DAY-1天,减去了该日期所在月份的第一个月。

我使用递归CTE添加天,直到第二天不在当前月份之内

然后我在我的数据集中算出了DATENAME周日

© www.soinside.com 2019 - 2024. All rights reserved.