确定';本周';在T-SQL中

确定';本周';在T-SQL中,sql,sql-server,tsql,Sql,Sql Server,Tsql,这是美国特有的地区,它认为一周的开始是星期天;我希望能够让SQL提供下一个星期天相对于今天的日期[getDate()]。如果今天是1月15日,则应返回1月18日;如果今天是星期天,它应该返回下一个星期天,也就是25号。这对于编写UDF来说是微不足道的,但我很好奇是否有人有其他的窍门/想法?今天的一周: DECLARE @d AS datetime SET @d = '1/15/2009' PRINT @d PRINT DATEADD(day, 8 - DATEPART(weekday, @d),

这是美国特有的地区,它认为一周的开始是星期天;我希望能够让SQL提供下一个星期天相对于今天的日期[getDate()]。如果今天是1月15日,则应返回1月18日;如果今天是星期天,它应该返回下一个星期天,也就是25号。这对于编写UDF来说是微不足道的,但我很好奇是否有人有其他的窍门/想法?

今天的一周:
DECLARE @d AS datetime
SET @d = '1/15/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET @d = '1/18/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)

-- So it should be able to be used inline pretty efficiently:
DATEADD(day, 8 - DATEPART(weekday, datecolumn), datecolumn)

-- If you want to change the first day for a different convention, simply use SET DATEFIRST before performing the operation
-- e.g. for Monday: SET DATEFIRST 1
-- e.g. for Saturday: SET DATEFIRST 6

DECLARE @restore AS int
SET @restore = @@DATEFIRST
SET DATEFIRST 1

DECLARE @d AS datetime
SET @d = '1/15/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET @d = '1/19/2009'
PRINT @d

PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET DATEFIRST @restore
选择@dow=DATEPART(d,GETDATE()),其中1=星期日,7=星期六

您希望添加足够的天数以获得下一个星期天

如果今天是1=周日,则添加7
如果今天是2=星期一,则添加6
如果今天是3=星期二,则添加5 等等

因此,您总是添加8-今天的周值

选择DATEADD(d,GETDATE(),8-@dow(GETDATE))


编辑:但是凯德赢了

现在在我的代码中使用您的,效果很好,尽管在SQL 2008中,我只对“日期”进行了转换,因此时间不会作为时间的一部分返回。我会让这个漂浮一天左右,看看是否有更好的表现,OTW它是凯德FTW!从周一开始的这一周的概括是什么?星期六(我相信这将是穆斯林国家本周的开始)。