4

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

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

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

我怎样才能做到这一点 ?, 始终将当前周作为结果。(当前日期应始终与两个结果相同或介于两者之间)

4

5 回答 5

2

尝试

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

星期天

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

星期一

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

于 2013-09-03T10:10:32.593 回答
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
于 2013-09-03T09:54:17.560 回答
0

在您声明代码之前:

    set @@DATEFIRST = 1

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

于 2013-09-03T09:47:09.080 回答
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 
于 2013-09-03T10:13:48.590 回答
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

于 2013-09-03T10:20:22.100 回答