我有一份使用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处理错误:“缺少表达式”。
有什么想法吗?
答案 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 =?