2016-06-16 60 views
2

我將週末日期添加到基於指定日期的列中。週末日期應該是下週日,除非日期是星期日,在這種情況下它應該使用該日期。週末日期退回問題

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

select DATEADD (dd, -1 * DatePart (DW, @DateValue) + 8, @DateValue) 

此查詢返回以下星期日2016-06-19,我想返回2016-06-12。

回答

3

這個怎麼樣

select DATEADD (dd, iif(DatePart (DW, @DateValue)=1,0,-1 * DatePart (DW, @DateValue) + 8), @DateValue) 

如果沒有SQL做2012+由bjones

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

只要它> = SQL Server 2012的 – BJones

+0

同意,然後進行簡單的case語句 –

+0

@JohnCappelletti謝謝你,我是2012年之前待辦事項 –

1

的建議我強烈建議你創建一個日曆表。雖然John Cappelletti的工作,你會發現加入dbo.Calendar會更容易使用,並提供更好的性能。

爲什麼你就必須有一個日期表[視頻]:https://www.brentozar.com/archive/2014/12/simply-must-date-table-video/

+0

你有任何鏈接到這種方法的例子? –

+0

添加了教會我如何使用它們的視頻。 –

+1

對於OP原來的陳述用法看起來似乎過度,但如果還有其他業務邏輯圍繞日期(以及個人經驗,通常有)進行,這實際上很有意義。 – user2366842