Sql 周末日期返回问题

Sql 周末日期返回问题,sql,sql-server,Sql,Sql Server,我正在根据指定的日期向列中添加一个周末日期。周末日期应为下一个星期日,除非该日期为星期日,否则应使用该日期 Declare @DateValue DateTime = '6/12/2016' --A Sunday select DATEADD (dd, -1 * DatePart (DW, @DateValue) + 8, @DateValue) 这个查询返回2016-06-19,也就是下一个星期天,我想返回2016-06-12。这个怎么样 select DATEADD (dd, iif(D

我正在根据指定的日期向列中添加一个周末日期。周末日期应为下一个星期日,除非该日期为星期日,否则应使用该日期

Declare @DateValue DateTime = '6/12/2016' --A Sunday

select DATEADD (dd, -1 * DatePart (DW, @DateValue) + 8, @DateValue)
这个查询返回2016-06-19,也就是下一个星期天,我想返回2016-06-12。

这个怎么样

select DATEADD (dd, iif(DatePart (DW, @DateValue)=1,0,-1 * DatePart (DW, @DateValue) + 8), @DateValue)
如果您没有bjones建议的SQL 2012+

select DATEADD (dd, case when DatePart (DW, @DateValue)=1 then 0 else -1 * DatePart (DW, @DateValue) + 8 end, @DateValue)

我强烈建议您创建一个日历表。虽然John Cappelletti的方法可行,但您会发现加入dbo.Calendar将更易于使用并提供更好的性能


为什么必须有一个日期表[视频]:

只要它>=SQL Server 2012贪婪,那么就是一个简单的例子statement@JohnCappelletti谢谢你,我是2012年之前的。你有这种方法的例子的链接吗?添加了教我如何使用它们的视频。对于OP最初声明的用法来说,似乎有些过分了,但是,如果有其他围绕日期的业务逻辑(从个人经验来看,通常是这样),这实际上是很有意义的。我想不出有哪一个场合我最终不需要。