将日期参数传递给SSRS中的Oracle Query

时间:2009-08-04 19:54:27

标签: sql oracle reporting-services

我有一份使用Oracle数据源的SSRS报告。我有一个问题;

select * from myTable t where
t.date between Date '2009-08-01' and Date '2009-08-04' + 1

此查询适用于Oracle和SSRS。当t.date列在08/01/2009和08/04/2009之间时,它从myTable获取所有行。 t.date列的类型为Date()

现在,我希望日期是参数。所以我将查询更改为:

select * from myTable t where
t.date between Date :myDate and Date :myDate + 1

当我在SSRS中运行此查询时,它会提示我输入以下值:myDate。

我试过2009-08-01,'2009-08-01'都导致了oracle sql处理错误:“缺少表达式”。

有什么想法吗?

6 个答案:

答案 0 :(得分:2)

如果你坚持使用一个参数(:myDate),使用with子句可以使过程更清晰。我不熟悉你的示例中的语法(即'Date',就像在查询中强制转换一样),下面是一个SQL实现。

with
 select TRUNC(TO_DATE(:mydate, 'yyyy-mm-dd')) p_date from dual as parameters
select t.* 
from 
  myTable t, 
  parameters 
where
  trunc(t.date) between parameters.p_date and parameters.p_date + 1

答案 1 :(得分:1)

仅仅因为你使用过:myDate两次并不意味着它们是相同的。它们是占位符,因为您有两个占位符,所以需要两个值。

答案 2 :(得分:1)

这对我来说使用SSRS:

SELECT t.* 
FROM   myTable t 
WHERE  t.date between :myDate AND to_date(:myDate + 1)

答案 3 :(得分:0)

您是否尝试在报告参数菜单中确保参数是DateTime类型(默认为字符串)?

答案 4 :(得分:0)

我遇到了类似的问题,查询范围更大,我发现只需搜索和替换例如:使用TO_DATE(:mydate)的mydate足以解决问题 - 然后将相同的日期传递给查询中的每个TO_DATE(:mydate)实例。

如果您希望将日期范围传递到查询中,我会为参数指定不同的名称,例如:StartDate和:SQL中的EndDate,并在报告中包含单独的参数@StartDate和@EndDate。这使得SQL更加清晰。

答案 5 :(得分:0)

SSRS较新的版本:参数不起作用,您需要使用吗?如下

在前两个参数date和第三个文本下方 从FINISH_DATE之间的任务中选择*?和?+1和t2.TYPE =?