周末退货问题

时间:2016-06-16 18:40:38

标签: 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。

2 个答案:

答案 0 :(得分:3)

这个怎么样

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)

答案 1 :(得分:1)

我强烈建议您创建一个Calendar表。虽然John Cappelletti会工作,但你会发现加入dbo.Calendar会更容易使用并提供更好的性能。

为什么你只需要一个日期表[视频]:https://www.brentozar.com/archive/2014/12/simply-must-date-table-video/