我正在尝试按日期过滤查询。
我在查询中有这一行:
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 ...我找了一些调试选项来查看实际执行的内容但是没有找到。
答案 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;它起作用了。