假设我想要一个 JasperReport,让用户可以根据需要过滤日期。SQL如下:
select * from foo where bar = $P{bar} and some_date > $P{some.date}
现在,如果他们没有传递日期,我不想按某个日期进行过滤。我发现人们使用以下内容:
select * from foo where bar = $P{bar} $P!{some.date.fragment}
并且该some.date.fragment
参数使用以下默认值定义:
($P{some.date} == null || $P{some.date}.equals("")) ? "" : "AND some_date >'" + new java.sql.Date($P{some.date}.getTime()).toString() + "'"
这不起作用,因为toString
它不会以我的 SQL 服务器理解的格式输出日期。我想让条件仍然使用带有 jdbc 驱动程序的准备好的语句并将参数折腾进去,我只希望准备好的语句依赖于参数是否为空。这可以做到吗?