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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage