我在查找是否有一種方法可以計算出本週的日期範圍。計算本週日期範圍
例如
Monday - 2016-11-21
Tuesday - 2016-11-22
Wednesday - 2016-11-23
等等的等等。
如果有人可以幫助我的語法和計算,將是偉大的。
我在查找是否有一種方法可以計算出本週的日期範圍。計算本週日期範圍
例如
Monday - 2016-11-21
Tuesday - 2016-11-22
Wednesday - 2016-11-23
等等的等等。
如果有人可以幫助我的語法和計算,將是偉大的。
如果你對自己的專欄感到滿意,那麼你可以這樣做;
SELECT
DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) Last_Monday
,DATEADD(WEEK, DATEDIFF(WEEK, 2, GETDATE()) - 1, 1) Last_Tuesday
,DATEADD(WEEK, DATEDIFF(WEEK, 2, GETDATE()) - 1, 2) Last_Wednesday
,DATEADD(WEEK, DATEDIFF(WEEK, 2, GETDATE()) - 1, 3) Last_Thursday
結果;
Last_Monday Last_Tuesday Last_Wednesday Last_Thursday
2016-11-14 00:00:00.000 2016-11-15 00:00:00.000 2016-11-16 00:00:00.000 2016-11-17 00:00:00.000
如果你需要它的行然後就聯盟的結果;
SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0) Date_Field, 'Last_Monday' Day_Name
UNION
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 2, GETDATE()) - 1, 1), 'Last_Tuesday'
UNION
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 2, GETDATE()) - 1, 2), 'Last_Wednesday'
UNION
SELECT DATEADD(WEEK, DATEDIFF(WEEK, 2, GETDATE()) - 1, 3), 'Last_Thursday'
結果;
Date_Field Day_Name
2016-11-14 00:00:00.000 Last_Monday
2016-11-15 00:00:00.000 Last_Tuesday
2016-11-16 00:00:00.000 Last_Wednesday
2016-11-17 00:00:00.000 Last_Thursday
請仔細閱讀此處,以便了解其工作原理的最佳解釋;
DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()), 0) Can someone explain me this
嗨Rich,這是一個正確的對待。我可以用它來滿足我的需求。可能聽起來像一個愚蠢的問題......但你可以分解它,這樣我就可以理解爲什麼這個工作? – user3482471
我剛剛鏈接了一篇文章,對其進行了很好的解釋,請告訴我,如果這不能爲您解決這個問題。 –
DECLARE @StartDT DATE = '2016-11-21'
;WITH CTE (_Date)
AS (
SELECT @StartDT
UNION ALL
SELECT DATEADD(DAY, 1, _Date)
FROM CTE
WHERE _Date < DATEADD(DAY, 6, @StartDT)
)
SELECT _Date
,DATENAME(W, _Date)
FROM CTE
雖然這段代碼可以解決這個問題,但[包括一個解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)這個問題是如何以及爲什麼會解決這個問題的有助於提高您的帖子的質量。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。 – Makyen
您可以設置起點和一週的結束日期和重複槽那些日期:
Declare @startDay datetime,
@endDay datetime,
@iterDate datetime
Set @startDay = dateadd(day, datediff(day, 0, getdate())/7 * 7, 0) --Starting day of this week
Set @endDay = dateadd(day, 7, @startDay)
Set @iterDate = @startDay
Declare @tmpResults Table (Date datetime, DayName varchar(20))
While (@iterDate < @endDay)
Begin
Insert into @tmpResults (Date, DayName)
Values (@iterDate, datename(weekday, @iterDate))
Set @iterDate = dateadd(day, 1, @iterDate)
End
select Date, DayName From @tmpResults
結果:
請記住「一週」有多個定義。根據您的需要,您可能需要牢記這一點。 – Jens
你好Jens,你是什麼意思?如果我能避免將來的問題,我會想。 – user3482471
根據地區的不同,一週定義的方式可能會發生變化。在一些地區,週一開始,週日開始。同樣每年處理數週,這些實施可能會有所不同,尤其是在一年的開始和結束時。第一週不一定從一月一號開始,它甚至可能仍然是去年一週的一部分。這是一個很常見的BI問題。 – Jens