我有一个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
...所以我的问题是,用@Year代替'2010'的正确语法是什么?
编辑:请注意,年份的实际格式为(例如)12 / 13,13 / 14
答案 0 :(得分: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()))
答案 1 :(得分:0)
根据您在评论中的澄清,如果您传入'12 / 13',您的查询将是这样的。
SELECT DATEDIFF(Year, birth_dt, '20'+LEFT(@Year,2) + '-08-31')
FROM table99
WHERE acad_period = @Year
答案 2 :(得分:0)
由于您的年份参数不是简单的年份值,而是像“13/14”这样的字符串,可能意味着2013/2014学年,我肯定会在查询之外处理它。
使用以下公式将计算出的@TermStart参数添加到数据集中:
=DateSerial(2000 + CInt(Split(Parameters!Year.Value,"/")(0)),8,31)
(只要您预计在2000年之前没有任何日期)
然后您可以在查询中使用@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