【问题标题】:Get date of monday and sunday this week获取本周周一和周日的日期
【发布时间】:2013-09-03 09:37:06
【问题描述】:

我需要获取本周星期一和星期日的日期。

我得到了这个 atm,但是当我将当前日期设置为同一个星期一时,它没有给出正确的结果。

DECLARE @date datetime
set @date = '2013-09-01 11:15:51'


    SELECT DATEADD(day,
                   -1 - (DATEPART(dw, CONVERT (date, @date)) + @@DATEFIRST -2) % 7,
                   CONVERT (date, @date)
           ) AS ThisModay, 
           DATEADD(day, 6, CONVERT (date, @date)) as NextSunday 

当我尝试将 2013-08-25 设为星期一时,但应该是 2013-09-01

我该怎么做? , 始终将当前周作为结果。 (当前日期应始终与两个结果相同或介于两者之间)

【问题讨论】:

  • 如果@date 是一周的一半,你想要日期之前的星期一和之后的星期日吗?
  • 上次查看时,20130825 和 20130901 都是星期天。正确答案如何?
  • @RobWhite 是的。日期应始终介于两者之间或相等。
  • @NiclasSchumacher 我的问题很愚蠢,因为我认为您已经解释过了。但我的解决方案和其他一些解决方案应该可以解决问题。
  • @RobWhite 使用您的解决方案,结果延迟了 1 天,所以从周二到周一。但是在我用 1 替换 2 之后,我得到了正确的结果!但是,我现在的问题是,为什么你的使用 2,而我的使用 1?关于周开始或?

标签: sql-server


【解决方案1】:

试试

SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),7) 

星期天

     SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0)

星期一

因为默认情况下一周的第一天是星期一,从 0 开始

【讨论】:

  • 这很好用,但是.. 当我尝试使用 date = '2013-09-08 11:15:51' 时,我会前进一周.. 它应该这样做。 ://
【解决方案2】:

我之前的回答是错误的,这里更正

DECLARE @date datetime
declare @wd int
set @date = '2013-09-06 11:15:51'

set @wd = case when datepart(weekday,@date)<2 then 7-datepart(weekday,@date) else     datepart(weekday,@date)-2 end

select DATEADD(day, -@wd,@date) As Monday,
                DATEADD(day, 6-@wd,@date) As Sunday

【讨论】:

    【解决方案3】:

    在您的声明代码之前:

        set @@DATEFIRST = 1
    

    默认为 7 ,表示一周的第一天是 Sunday 。当你把它等于 1 时,第一天将是星期一,

    【讨论】:

    • 语法为 SET DATEFIRST 1;
    【解决方案4】:

    尝试关注

    其实你不需要 SET DATEFIRST 但这只是为了预防

    SET DATEFIRST 7;
    DECLARE @date datetime
    set @date = '2013-09-11 11:15:51'
    
    
        SELECT cast(DATEADD(wk, DATEDIFF(wk, 0, @date), 0) as DATE) AS ThisModay, 
               DATEADD(day, 6, CONVERT (date, @date)) as NextSunday 
    

    【讨论】:

      【解决方案5】:

      我的版本:

      DECLARE @date datetime = '2013-08-31 11:15:51'
      DECLARE @Monday INT = 2
      DECLARE @NextSunday INT = 8
      
      SELECT 
      DATEADD(day, (@Monday - DATEPART(dw, @date)), @date) AS ThisMonday
      , DATEADD(day, (@NextSunday - DATEPART(dw, @date)), @date) AS NextSunday 
      

      这里SQL Fiddle进行测试

      【讨论】:

        猜你喜欢
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        • 2017-09-16
        • 2010-11-19
        • 2022-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多