【问题标题】:Passing date parameters to Oracle Query in SSRS将日期参数传递给 SSRS 中的 Oracle 查询
【发布时间】:2009-08-04 19:54:27
【问题描述】:

我有一个使用 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 处理错误:“缺少表达式”。

有什么想法吗?

【问题讨论】:

    标签: sql oracle reporting-services


    【解决方案1】:

    如果您坚持使用一个参数 (:myDate),使用 with 子句可以使过程更简洁。我不熟悉您在示例中的语法(即查询中的“日期”),下面是仅 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
    

    【讨论】:

      【解决方案2】:

      仅仅因为您使用了 :myDate 两次并不意味着它们是相同的。它们是占位符,由于您有两个占位符,因此您需要两个值。

      【讨论】:

      • @Saobi - 根据我的经验,这是正确的。你不能重复一个参数,所以我认为这就是 Brian 给出的 WITH 方法有效的原因。或者,您可以将其设为 :myDate2 并将与 :MyDate 相同的 SSRS 参数绑定到它。
      【解决方案3】:

      这对我使用 SSRS 有效:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 使用的语法用于字符串变量(即日期string
        • 这是不正确的。 IIRC 问题不会通过使用 datetime 数据类型来解决。问题在于两次使用参数名称。
        【解决方案5】:

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

        如果您想将日期范围传递给查询,我会给参数不同的名称,例如SQL 中的 :StartDate 和 :EndDate 并在报告中具有单独的参数 @StartDate 和 @EndDate。这使得 SQL 更加清晰。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-08-02
            • 2017-12-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多