【问题标题】:Get the week number of a given date (Week Start from Sunday)获取给定日期的周数(星期从星期日开始)
【发布时间】:2017-07-19 06:29:07
【问题描述】:

我必须计算给定日期的周数,一周的第一天是Sunday

这就是我正在做的事情。

 DECLARE @Range_StartDate AS DATETIME  = '2017-01-01'
SELECT    @Range_StartDate,DATEPART(WEEK, @Range_StartDate) 

仅举个例子,2016 年,第一周从 1 月 3 日开始,第一周是星期日,我想提供 '2016-01-01',它应该在第一周返回 2016-01-03年度最佳。

【问题讨论】:

  • 好的,你的结果应该是'2017-01-01 00:00:00', 1。是别的吗?
  • 如果我从周日开始设置工作日的偏移量,则 2017 年的第一周从 1 月 1 日开始。
  • @DareDevil 1 月 3 日一周的第一天?在什么日历上?
  • 在我的日历中 2017-01-01 是星期天。也许您在谈论不同的年份?
  • 好的,那么您希望得到什么? ISO_WEEK 返回 53(2017 年为 52),WEEK 返回 1。

标签: sql-server datetime weekday


【解决方案1】:

如果您想将 2016-01-01 作为输入并希望将 2016-01-03 作为输出,那么您可以编写如下内容。

 DECLARE @Range_StartDate AS DATETIME  = '2016-01-01'
 Declare @Days_ToAdd AS Int =  8-DATEPART(dw, @Range_StartDate) 
 if @Days_ToAdd = 7
 set @Days_ToAdd =0 

SELECT    @Range_StartDate,DATEADD(day,@Days_ToAdd,@Range_StartDate)

【讨论】:

    【解决方案2】:

    您可以使用以下代码获取一周的第一天。 例如, 日期:2017-01-01,第一天是 2017-01-03 00:00:00.000

    DECLARE @Date datetime
    DECLARE @Year int = YEAR('2017-01-01')
    SET @Date = DATEADD(YEAR, @Year - 1900, 0)
    
    SELECT DATEADD(DAY, (@@DATEFIRST - DATEPART(WEEKDAY, @Date) + (8 - @@DATEFIRST) * 2) % 6, @Date)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-24
      • 2018-02-05
      • 1970-01-01
      • 2018-06-12
      • 1970-01-01
      • 2020-03-21
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多