条件查询中的日期类型参数

时间:2014-02-19 07:36:50

标签: sql oracle jasper-reports

我是 JasperReports 的新手(我正在使用 iReport 5.5.0 )。我正在尝试将条件查询写入报告。

我创建了以下参数:

$P{queryControl} <String>
${date} <Date>
${deptName} <String>

该参数名为$ P {queryControl},提示被关闭,因为我在运行时设置值检查$ P {sex}的值。 此外,$ {date},$ {deptName}会启用提示。

将参数的默认值设置为:

 $P{sex}.equals("F")
    ? "Select * from employees e, department d where e.staff_no = d.staff_no and      department_name = '"+${deptName}+"' and join_date >= ${date}"
    : "Select * from employees e, department d where e.staff_no = d.staff_no and department_name = '"+${deptName}+"' and join_date <= ${date}"

然而,我发现在运行报告时它不起作用。并得到以下错误:

Caused by: java.sql.SQLException: ORA-01858: a non-numeric character found where a digit was expected. 

当我在where子句中不使用$ {date}时,可以打开报告。

任何解决方案?

1 个答案:

答案 0 :(得分:0)

您必须将var $ {date}(根据其内容)转换为真实的oracle-date。这可以通过以下方式完成:

 $P{sex}.equals("F")
? "Select * from employees e, department d where e.staff_no = d.staff_no and      department_name = '"+${deptName}+"' and join_date >= to_date('${date}','[FORMAT]')"
: "Select * from employees e, department d where e.staff_no = d.staff_no and department_name = '"+${deptName}+"' and join_date <= to_date('${date}','[FORMAT]')"

而不是“[FORMAT]”在那里插入正确的Format-String。例如: 如果$ {date}包含iso-date,如2014-02-19,则正确的Format-String为'YYYY-MM-DD'。 可以在此处找到所有格式的侦听:http://www.techonthenet.com/oracle/functions/to_date.php(向下滚动)