2013-02-25 27 views
0

這些看起來有點冗長,可能過於複雜;我可以簡化和/或使其更具可讀性嗎?使用GETDATE()的前一個週一/週日日期的標準語法

他們正在返回前一週的星期一和星期日的日期(如整數類型)。

declare @sDate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE())-1, 0),112), 
    @edate int = CONVERT(CHAR(8),DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1),112); 

回答

3

根據我的經驗,如果您將日期轉換爲除演示文稿以外的任何其他原因的char,那麼您犯了一個錯誤。另外 - 如果你打電話給GetDate兩次,你應該會得到不同的答案。

DECLARE 
    @Now datetime, 
    @WeekStart datetime, 
    @LastWeekStart datetime, 
    @LastWeekEnd datetime 

SET @Now = GetDate() 
SET @WeekStart = DateAdd(wk, DateDiff(wk, 0, @Now), 0) --standard time trimmer 
SET @LastWeekStart = DateAdd(wk, -1, @WeekStart) 
SET @LastWeekEnd = DateAdd(dd, -1, @WeekStart) 

SELECT @Now, @WeekStart, @LastWeekStart, @LastWeekEnd 

另外要注意,有一個SQL設置,用於控制其中的SQL Server認爲,本週開始,所以這段代碼可能不會給週一>週日取決於設置。

1

最簡單方法是用calendar table。日曆表可能會簡化您的查詢,從而沿着這些方向行事。

-- Select the previous Sunday. The right inequality operator depends 
-- on exactly what *you* mean by "previous". 
select max(calendar_date) 
from calendar 
where calendar_date < current_date 
    and calendar_day_of_week = 'Sun'; 
+0

+1感謝您的建議/幫助....我們有一個日期維度,所以我認爲我需要探索 – whytheq 2013-02-26 15:05:31

相關問題