Bedingte Where-Klauseln in JasperReports
Angenommen, ich möchte einen JasperReport, mit dem der Benutzer nach einem Datum filtern kann, wenn er dies wünscht. Die SQL lautet wie folgt:
select * from foo where bar = $P{bar} and some_date > $P{some.date}
Jetzt möchte ich nicht nach einem Datum filtern, wenn das Datum nicht eingegeben wurde. Ich habe den folgenden Kludge gefunden, den die Leute verwenden:
select * from foo where bar = $P{bar} $P!{some.date.fragment}
Und dassome.date.fragment
Parameter ist mit dem folgenden Standard definiert:
($P{some.date} == null || $P{some.date}.equals("")) ? "" : "AND some_date >'" + new java.sql.Date($P{some.date}.getTime()).toString() + "'"
Dies funktioniert nicht wie dastoString
gibt das Datum nicht in einem Format aus, das mein SQL Server versteht. Ich möchte, dass die Bedingung weiterhin eine vorbereitete Anweisung mit dem jdbc-Treiber verwendet und den Parameter hineinwirft. Ich möchte nur, dass die vorbereitete Anweisung davon abhängt, ob der Parameter null ist oder nicht. Kann das gemacht werden?