Получите дату понедельника и воскресенья на этой неделе

На этой неделе мне нужно получить дату понедельника и воскресенья.

Я получил этот 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

Как я могу это сделать ? , имеют текущую неделю в качестве результатов за все время. (текущая дата всегда должна быть такой же, как или между двумя результатами)

мой предыдущий ответ был неправильным, это исправление

 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, [email protected],@date) As Monday, DATEADD(day, [email protected],@date) As Sunday 

Пытаться

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

для воскресенья

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

понедельника

поскольку по умолчанию первый день недели – понедельник, начиная с 0

Перед объявлением кода:

  set @@DATEFIRST = 1 

по умолчанию это 7, то есть первая неделя – воскресенье. Когда вы ставите его равным 1, первый день будет понедельником,

попробуйте следовать

На самом деле вам не нужен 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 

Моя версия:

 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 для тестирования

Давайте будем гением компьютера.