SSRS :在查询中嵌入@Year参数



我有一个SSRS报告,它使用@Year参数,该参数由用户在运行时选择。

到目前为止,很好,但是

"数据集属性"部分中的SQL包含硬编码日期"2010-08-31",但是,它的年份部分需要与用户选择的@Year参数相同。换句话说,如果在 2010 年运行报表,则结果是正确的,但如果现在(在 2014 年)运行报表,则结果不正确。

目前的 SQL 是(需要最小值):

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

您可以替换该行

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()))

根据您在评论中的澄清,如果您传入"12/13",您的查询将是这样的。

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

由于您的年份参数不是简单的年份值,而是像"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

最新更新