我有这个 where 子句:
WHERE p.ROLE = 'doctor'
AND((p6.PA_Name='Event_Day_From' AND p6.PA_Value>= SUBSTRING('01.01.2012', 1, 2))
AND (p7.PA_Name='Event_Month_From' AND p7.PA_Value>=SUBSTRING('01.01.2012', 4, 2))
AND (p8.PA_Name='Event_Year_From' AND P8.PA_Value>=SUBSTRING('01.01.2012', 7, 4)))
AND ((p9.PA_Name='Event_Day_To' AND P9.PA_Value<=SUBSTRING('30.12.2012', 1, 2))
AND (p10.PA_Name='Event_Month_To' AND P10.PA_Value<=SUBSTRING('30.12.2012', 4, 2))
AND (p11.PA_Name='Event_Year_To' AND P11.PA_Value<=SUBSTRING('30.12.2012', 7, 4)))
在上面之后我有一个
union all
,最后我有另一个与上面完全相同的WHERE
子句。
在 BIRT 中,可以传递参数,并且您必须在 SQL 查询中需要传递参数的位置插入
?
。如您所见,我有一个“开始”日期和一个“结束”日期,它们将通过“用户输入”传递。现在我的问题是我不知道如何将 SDate
参数传递给所有 start dates
以及如何将 EndDate
参数传递给所有 end dates
我的问题有解决办法吗?我通过从参数创建包含单行的表并将其附加到报告查询来解决这个问题,如下所示:
,(select ? SDate, ? EDate) params
WHERE p.ROLE = 'doctor'
AND((p6.PA_Name='Event_Day_From' AND p6.PA_Value>= SUBSTRING(params.SDate, 1, 2))
AND (p7.PA_Name='Event_Month_From' AND p7.PA_Value>=SUBSTRING(params.SDate, 4, 2))
AND (p8.PA_Name='Event_Year_From' AND P8.PA_Value>=SUBSTRING(params.SDate, 7, 4)))
AND ((p9.PA_Name='Event_Day_To' AND P9.PA_Value<=SUBSTRING(params.EDate, 1, 2))
AND (p10.PA_Name='Event_Month_To' AND P10.PA_Value<=SUBSTRING(params.EDate, 4, 2))
AND (p11.PA_Name='Event_Year_To' AND P11.PA_Value<=SUBSTRING(params.EDate, 7, 4)))
**我目前在 PostgreSQL 数据库上使用此方法。
[编辑]BIRT 使用普通 JDBC,但它不支持“命名参数”,所以你不能写:
这会出错。 其他选项是使用属性绑定或 JavaScript 构建查询并在执行之前替换其中的部分内容。
请参阅此示例报告某些数据库还支持
WITH
语法来为 ?
参数分配别名。
解释了如何使用它。