【问题标题】:ssrs date paramssrs 日期参数
【发布时间】:2019-05-01 11:38:58
【问题描述】:

我有一个 SSRS 报告的 SQL 查询以返回在 2 个日期之间创建记录的结果,我使用的参数与日期值一样

select * from results
where [startdate] >=@datestart or [startdate] <=@dateend

当我运行 SSRS 报告并为 @startdate 和 @enddate 选择相同的日期时,我得到了 2 条我知道不正确的记录返回。当我运行 SQL 查询并使用日期,例如“2019 年 2 月 1 日”而不是参数时,我得到不同的结果。如果我使用的是实际日期,是否需要从参数中排除时间或将@startdate 的时间设置为 00:00:00 并将@dateend 设置为 23:59:59 以获得相同的结果?

【问题讨论】:

  • 我添加了 SQL server 标签,因为提到了 SSRS(SQL Server Reporting Services)
  • 顺便说一句,你脚本中的or 应该是and...
  • 是的,您需要从传递的参数值中排除时间部分,或者在 T-SQL 语句中执行此操作。另外,我认为您可能在这里想要AND 而不是OR。当基础列包含时间时,最好指定包含开始日期和排除结束日期,例如WHERE [startdate] &gt;=@datestart AND [startdate] &lt; DATEADD(day, 1, @dateend)

标签: sql sql-server date reporting-services parameters


【解决方案1】:

如果您的 SSRS 参数是 date 值并且您的数据是 datetime 值,最简单的解决方案是在您的 @dateend 中添加一天,然后在 之前查找任何 datetime 值但不等于它。

使用&lt; 而不是&lt;= 很重要,因为时间是无限的。在您将@enddate 值更改为附加23:59:59 的示例中,将不包括23:59:59 和一天结束之间的任何datetime 值(例如23:59:59.5)。

因此,您可以像这样构建脚本:

select *
from results
where [startdate] >= @datestart
    and [startdate] < dateadd(day,1,@dateend)

【讨论】:

    【解决方案2】:

    您应该只将日期时间截断为日期。

    select * from results
      where cast(startdate As Date) >= @datestart
        and cast(startdate As Date) <= @dateend
    

    【讨论】:

    • 这不是有效的 T-SQL 语法
    • 问题标记为SQL-Server
    • @iamdave 试试这个“select * from results where cast(startdate As Date) >=@datestart and cast(startdate As Date)
    【解决方案3】:

    @imadave 的解决方案将完美运行。

    另外,您可以只使用“BETWEEN”子句来获得结果。它将返回给定范围(包括)之间的所有日期。未指定时间部分时,默认为 12:00 A.M.

    SELECT * FROM results 
    WHERE [startdate] BETWEEN @datestart AND @dateend
    

    【讨论】:

      猜你喜欢
      • 2015-11-29
      • 2018-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多