0

我有这个 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参数传递给 allstart dates并将EndDate参数传递给 allend dates

我的问题有解决方案吗?

4

2 回答 2

1

[编辑] BIRT 使用普通的 JDBC,而不是它不支持“命名参数”,所以你不能写:

... p6.PA_Value>= SUBSTRING(:start, 1, 2) ...

这将给出一个错误。

其他选项是使用属性绑定或 JavaScript 构建查询,并在执行之前替换其中的一部分。请参阅此示例报告

一些数据库还支持为参数WITH分配别名的语法?这篇博客文章解释了如何使用它。

于 2012-11-06T12:39:30.223 回答
1

我通过从参数中创建具有单行的表来解决这个问题,并将其附加到报表查询中,如下所示:

,(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 数据库上使用此方法。

于 2013-01-11T08:52:44.947 回答