我在Oracle 9数据库上运行了SSRS 2005报告。
报告使用此简单查询返回数据集
SELECT order_number FROM apps.oe_order_headers_all
WHERE ordered_date >= to_date(:start_date,'DD-MON-YYYY')
AND ordered_date < to_date(:end_date,'DD-MON-YYYY') +1
如果SSRS中的字符串类型为参数,则参数可以正常工作。例如。 01_ JAN-2014适用于start_date和end_date。但是如果更改为datetime,报表将不返回任何内容(如果在字符串中,则报表返回许多行)。我真的想使用SSRS的日期选择器控件。
这可能更像是SSRS的东西而不是Oracle的东西?
答案 0 :(得分:2)
这可能是一个日期转换问题,但我很惊讶它不是错误或返回相同的数据 - 至少在您给出的示例日期。
在上一个问题中,您输入了一个字符串,因此添加to_date()
是有道理的。但如果您将绑定为日期,那么您不需要那些。
这很好:
to_date(<string>,'DD-MON-YYYY')
但是这个:
to_date(<date>,'DD-MON-YYYY')
真的在做:
to_date(to_char(<date>,<NLS_DATE_FORMAT>), 'DD-MON-YYYY')
如果你的`NLS_DATE_FORMAT恰好与你提供的固定格式相同,那么这就好了,因为它只是一个字符串和后面的冗余转换。但如果它们不同,那么你会得到错误或不正确的结果。
例如,如果我的NLS_DATE_FORMAT
为MM/DD/YYYY' then
to_date(sysdate,'DD-MON-YYYY ) gets an
ORA-01843:无效月error, because it's trying to interpret
28 {{ 1}} 02`作为一天。
所以你只需将其简化为:
as the month and
鉴于您从中得到的奇怪错误,您也可以尝试:
SELECT order_number FROM apps.oe_order_headers_all
WHERE ordered_date >= :start_date
AND ordered_date < :end_date +1
...但不明白为什么更简单的AND ordered_date < :end_date + interval '1' day
是错误的我不相信会有所帮助。它似乎没有遵循正常的datetime arithmetic rules。这是另一种可能性,但不一定是必要的:
+1