如何在jasper中使用日期范围类型参数作为普通的java.util.date

时间:2016-05-13 10:36:36

标签: jasper-reports

我创建了两个输入控制器BeginDate和EndDate作为日期范围类型。我需要将输入日期范围的日期转换为util.date。这些是我创建的数据类型。

<parameter name="BeginDate" class="net.sf.jasperreports.types.date.DateRange"/>
<parameter name="EndDate" class="net.sf.jasperreports.types.date.DateRange"/>

  <![CDATA[SELECT * 
FROM table 
WHERE $X{BETWEEN,date,BeginDate,EndDate}
    AND total > 0;]]>

我需要在下面使用这些日期。

   <![CDATA[SELECT * 
    FROM table 
    WHERE 
date >= $P{BeginDate} AND
date < $P{EndDate}
        AND total > 0;]]>

1 个答案:

答案 0 :(得分:2)

DateRange类型提供了两种方法:getStart()getEnd()来获取范围的开头和结尾。这些方法返回java.util.Date个对象,您可以进一步使用它们。

但是因为查询表达式中不允许使用DateRange类型,所以您需要创建类型为java.util.Date的新参数,以便根据需要使用:

<parameter name="BeginDate_start" class="java.util.Date">
    <defaultValueExpression><![CDATA[$P{BeginDate}.getStart()]]></defaultValueExpression>
</parameter>
<parameter name="EndDate_end" class="java.util.Date">
    <defaultValueExpression><![CDATA[$P{EndDate}.getEnd()]]></defaultValueExpression>
</parameter>

然后您的查询可能如下所示:

<queryString>
    <![CDATA[SELECT * FROM table 
WHERE date >= $P{BeginDate_start} AND date < $P{EndDate_end} AND total > 0]]>
</queryString>