【问题标题】:How can I count how many Sundays is in one month in SQL Server?在 SQL Server 中如何计算一个月中有多少个星期日?
【发布时间】:2020-03-25 02:32:39
【问题描述】:

这里只有一个星期天,但我数不清一个月有多少个星期天:

select dateadd(dd, 8 - datepart(dw, '2019-11-01'), '2019-11-01')

【问题讨论】:

标签: sql-server count dayofweek days


【解决方案1】:
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 Sunday

【讨论】:

    【解决方案2】:

    这很简单,因为 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 函数:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2012-01-28
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多