Jasper - Oracle - 如何按日期过滤

时间:2015-05-14 11:36:52

标签: sql oracle jasper-reports

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

我在查询中有这一行:

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

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

数据库日期的类型为DATE。参数的类型为String。

我也尝试过:

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

我的数据类型错了吗?我已经尝试过别人,但无济于事。我的查询错了吗?

我正在使用iReport ...我找了一些调试选项来查看实际执行的内容但是没有找到。

2 个答案:

答案 0 :(得分:0)

如果要比较DATE,则需要使用 TO_DATE 将文字转换为DATE。

无需使用 LIKE 运算符。您可以在DATE列上使用 TRUNC ,但这会抑制任何常规的索引用法。最好使用 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;

答案 1 :(得分:0)

存储在数据库中的格式类似于12 / MAY / 15。 虽然我确信我在输入参数中尝试了这个类型为String的类型,但事实证明这是一个神奇的答案:)我的输入是&#39; 12 / MAY / 15&#39;它起作用了。