2015-07-01 15 views
1

我正在嘗試創建一個SQL以基於日期提取數據,現在有了使用where子句的條件以獲得我真正需要的內容 我有下面的表和TVF:SQL Server - 其中+ TVF/SVF,交叉應用,T-SQL

/* dbo.weeks -> column(weeknum), column(date) **date is all Fridays** */ 
weeknum date 
    1  2001-09-21 
    2  2001-09-28 
    3  2001-10-05 
...  .... 
/* fnBenchMark(@weeknum) -> display benchmark data based on weeknum */ 

這裏是我的代碼:

SELECT p.weeknum, p.date, q.companyid, q.index 
FROM dbo.Weeks AS p 
cross apply 
dbo.fnBenchmark(p.weeknum) as q 
where date = '2001-09-21' 

/* Here is what I wish to add to above code but don't know how to do it */ 

if  
    date in dbo.Weeks column (date) --if date on where clause is a Friday and it is on dbo.weeks table 
then run above code  
else 
    change date to LastFridayDate --if date on where clause is Sat~Thur, then use previous Friday's date 
then run above 

例如,假設2001-09-21是週五,如果我在這裏輸入2001年9月24日子句,我希望SQL運行「where date =」2001-09-2 1「since 2001-09-24我輸入的不是星期五」

也許我應該創建另一個函數(SVF?)來返回上一個星期五的日期基於@date我輸入的參數嗎?然後用:

where date = fnFridayCheck(@date I entered) 
+0

什麼是'** **日期'??? – Amit

+0

添加類型和或create table語句可能會有所幫助。 – surfmuggle

+0

如果你寫了一個函數來獲得下一個(或之前 - 如果你選擇一個星期三,你想要最後還是下個星期五?)星期五。所以你的'WHERE'子句就像'WHERE [date] = fnFriday('2001-09-24')'。然後,您必須將此函數作爲一個函數輸入1個日期輸入,並使用您的dbo.weeks表輸出也是星期五的最近日期。 – Tingo

回答

0

mayby你可以使用

datepart(dw,getdate()) 

,並不僅僅是StoredProcedure的,或只是一個查詢例如

IF datepart(dw,getdate()) = 6 
BEGIN 
    something if it's a friday (because 6 in dateprart points to firday) 
END 
ELSE 
BEGIN 
    something else to do 
END