Angenommen, ich möchte einen JasperReport, mit dem der Benutzer nach einem Datum filtern kann, wenn er dies wünscht. Die SQL ist wie folgt:.Bedingte Where-Klauseln in JasperReports
select * from foo where bar = $P{bar} and some_date > $P{some.date}
Nun, ich nicht von einem Datum filtern will, wenn sie das Datum nicht bestanden haben, fand ich folgende Flickschusterei, dass die Menschen nutzen:
select * from foo where bar = $P{bar} $P!{some.date.fragment}
Und die some.date.fragment
Parameter werden 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 ist nicht als toString
nicht ausgibt das Datum in einem Format arbeiten, das mein SQL Server versteht. Ich möchte, dass die Bedingung immer noch 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?
In meinem Fall der zweite Parameter war ein String und der Teil der Klausel where I $ P verwendet {String}. –