Jasper - Oracle - 如何按日期过滤

Jasper - Oracle - How to filter by date

我正在尝试按日期过滤查询。

我的查询中有这一行:

AND (the_date like CONCAT (TO_DATE($P{THE_DATE}, 'YYYY-MM-DD'),'%'))

但是,我似乎无法有效地将参数日期与数据库日期进行比较。

数据库日期是 DATE 类型。参数是字符串类型。

我也试过:

AND (TO_CHAR(the_date) like CONCAT ($P{THE_DATE,'%')

我的数据类型有误吗?我试过其他人但无济于事。我的查询有误吗?

我正在使用 iReport...我正在寻找某种调试选项以查看实际执行的内容,但没有找到。

当你想比较DATE时,你需要使用TO_DATE将字面量转换成DATE。

无需使用 LIKE 运算符。您可以在 DATE 列上使用 TRUNC,但是,这会抑制任何常规 index 用法。最好使用 DATE RANGE 条件 .

请记住,DATE 具有日期和时间元素。

例如,

WHERE
   the_date >= TO_DATE('14-MAY-2015','DD-MON-YYYY')
AND 
   the_date < TO_DATE('14-MAY-2015','DD-MON-YYYY') +1;

您可以使用 INPUT 参数或定义为字符串的本地 变量 而不是上面示例中的文字。

WHERE
   the_date >= TO_DATE(in_date,'DD-MON-YYYY')
AND 
   the_date < TO_DATE(in_date,'DD-MON-YYYY') +1;

数据库中存储的格式类似于 12/MAY/15。 尽管我确信我在字符串类型的输入参数中尝试过此操作,但这被证明是神奇的答案 :) 我的输入是“12/MAY/15”并且有效。