對於我在T-SQL(MSSQL 2005)中執行的任務,我有相當艱鉅的任務。我有這樣的表格:T-SQL任務 - 在兩個日期範圍內查找指定星期幾的所有日期範圍
WeekDay| SlotTime
------------------
| 1 | 07:00
| 3 | 09:00
| 7 | 14:00
| 1 | 15:00
| 4 | 22:00
| 6 | 08:00
其中第1列是週日數,第2列是某個時間值。
至於我的查詢參數我有兩個日期,例如:
StartDate = '2011-07-20'
EndDate = '2011-08-17'
這是我的數據的範圍定義。我必須爲這些範圍生成WeekDay(來自上表)發生的所有日期,並將它們添加到SlotTime值中。 因此,例如,對於上述日期範圍的結果列應該是:
2011-07-20 9:00
2011-07-21 22:00
2011-07-23 8:00
2011-07-24 14:00
2011-07-25 7:00
2011-07-25 15:00
2011-07-27 9:00
2011-07-28 22:00
2011-07-30 8:00
etc.
...
任何想法如何實現這一目標?有小費嗎? :)我正在考慮這是相當不可能的,沒有一些巨大的(?)計算和附加表...
編輯(也許這個片段將有所幫助) 我正在玩這個函數來使用它作爲我的計算的一部分,但無法實現我的目標。也許有些部分可以用於最終的解決方案...
create function dbo.NthWeekDay(
@first datetime, -- First of the month of interest (no time part)
@nth tinyint, -- Which of them - 1st, 2nd, etc.
@dow tinyint -- Day of week we want
) returns datetime as begin
-- Note: Returns a date in a later month if @nth is too large
declare @result datetime
set @result = @first + 7*(@nth-1)
return @result + (7 + @dow - datepart(weekday,@result))%7
end
go
SET DATEFORMAT ymd
SET DATEFIRST 1
select dbo.NthWeekDay('2011-07-20',1,1) as D
go
drop function NthWeekDay
什麼定義1是什麼?週日,週一,週四? –
對不起,這是星期一。 SET DATEFIRST 1 SET DATEFORMAT ymd – binball
我現在想不到字符串,所以如果沒有人有明天就會留下答案。如果您想自己嘗試,則需要使用'DATEPART(dw,'')'。我認爲這不會像你想象的那麼複雜。 –