我需要在本周获得星期一和星期日的日期。
我得到了这个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
我该怎么做? ,有当前的一周作为结果。 (当前日期应始终与两个结果相同或在两个结果之间)
答案 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用于测试