如何在jasper中像普通java.util.date一样使用日期范围类型参数

问题描述 投票:0回答:2

我创建了两个输入控制器 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;]]>
jasper-reports
2个回答
2
投票

DateRange
类型提供了2种方法:
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>

0
投票

您可以通过简单地在 BETWEEN 之前添加 [ 字符来使用上面列出的原始查询。请参阅下面更新的查询:

<![CDATA[SELECT * FROM table WHERE $X{[BETWEEN, date, BeginDate, EndDate} AND total > 0;]]>
© www.soinside.com 2019 - 2024. All rights reserved.