2014-02-10 34 views
1

我有一個SSRS報告,它使用@Year參數,用戶在運行時選擇該參數。SSRS:在查詢中嵌入@Year參數

到目前爲止還不錯,但數據集屬性部分中的SQL包含硬編碼日期'2010-08-31',但其年份部分需要與@Year參數相同用戶選擇的。換句話說,如果您在2010年運行報告,結果將是正確的,但如果您現在運行(2014年),結果將不正確。

目前這些SQL(需要miminum):

SELECT DateDiff(Year, birth_dt, '2010-08-31') 
--Date of Start of Academic Term 
FROM table99 
WHERE acad_period = @Year 

...所以我的問題是,什麼是到位「2010」的替換@Year值正確的語法?

編輯:請注意,這一年的實際格式(如)12/13,13/14

+0

我應該指出你的年齡計算是有缺陷的。 'DateDiff()'以年爲單位返回差異,無論日期如何。 http://stackoverflow.com/questions/1572110/how-to-calculate-age-in-years-based-on-date-of-birth-and-getdate –

回答

0

您可以更換線

SELECT DateDiff(Year, birth_dt, '2010-08-31') 

SELECT DateDiff(Year, birth_dt, @Year+'-08-31') 

與當前日期相同

SELECT DateDiff(Year, birth_dt, DATEPART(yyyy, getdate())+'-' + DATEPART(mm, getdate()) +'-'+DATEPART(dd, getdate())) 
0

根據你在評論中的澄清,如果你通過'12/13'你的查詢會是這樣的。

SELECT DATEDIFF(Year, birth_dt, '20'+LEFT(@Year,2) + '-08-31') 
FROM table99 
WHERE acad_period = @Year 
0

由於你去年參數不是一個簡單的年份值,但而不是一個字符串,如「13/14」,大概意思是2013/2014學年,我肯定會處理解析它的查詢之外。

=DateSerial(2000 + CInt(Split(Parameters!Year.Value,"/")(0)),8,31)

(只要你不期待任何日期之前,當然2000)

然後你:

添加計算@TermStart參數數據集用下面的公式可以使用@Year和@TermStart參數查詢,像這樣:

SELECT DateDiff(Year, birth_dt, @TermStart) 
--Date of Start of Academic Term 
FROM table99 
WHERE acad_period = @Year 

但正如我上面的評論中提到,這是正沒有正確的方法來計算年齡。有幾種方法可以做到這一點。我最喜歡的是:

SELECT datediff(hour,birth_dt,@TermStart)/8766 
--Date of Start of Academic Term 
FROM table99 
WHERE acad_period = @Year 
+0

謝謝你的回答,但那是行不通的。 @Year參數實際上是一個字符串,例如12/13,13/14等。我的歉意 - 我的錯 - 我應該在第一篇文章中說清楚。 – user3293484

+0

在這種情況下,公式將爲'= DateSerial(CInt(Parameters!Year.Value),8,31)'。在任何情況下,在查詢中連接都可以正常工作。我儘量避免在查詢中改變參數,因爲我覺得這使得它更難理解。在一個單獨的參數中進行修改可以讓我用參數名稱來表達變更的含義。 –

+0

哦,我現在看到年份參數並不僅僅是一年。我會更新我的答案。 –