SSRS 2005将datetime参数传递给Oracle

时间:2014-02-28 16:56:44

标签: oracle reporting-services

我在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的东西?

1 个答案:

答案 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_FORMATMM/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