本周星期一和星期日的日期

时间:2013-09-03 09:37:07

标签: sql-server

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

我得到了这个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

我该怎么做? ,有当前的一周作为结果。 (当前日期应始终与两个结果相同或在两个结果之间)

5 个答案:

答案 0 :(得分:2)

尝试

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

周日

     SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0)
星期一

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

答案 1 :(得分:1)

我之前的回答是错误的,继承人的纠正

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

答案 2 :(得分:0)

在申报代码之前:

    set @@DATEFIRST = 1

默认情况下为7,意味着本周的第一天是星期天。当你把它等于1时,第一天就是星期一,

答案 3 :(得分:0)

尝试以下

实际上你不需要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 

答案 4 :(得分:0)

我的版本:

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用于测试