【问题标题】:Date range Parameters in SSRS. Passing same date value to @StartDate and @EndDate is not returning any dataSSRS 中的日期范围参数。将相同的日期值传递给 @StartDate 和 @EndDate 不返回任何数据
【发布时间】:2021-02-09 21:56:30
【问题描述】:

具有数据范围参数 StartDate 和 EndDate 的 SSRS 报告指向 DateTime 列,格式为 2020-07-05 08:00:00.287

当我在 StartDate 和 EndDate 中选择相同日期时说 2020 年 10 月 5 日,期待该单日的记录,但它没有返回/显示任何数据。当我检查并查看表中的可用数据时。

当前查询: 从表 1 中选择 * 其中 [DateTime]>=@StartDate AND [DateTime]

也试过 BETWEEN and (CONVERT(VARCHAR(20),DateTime,101),没用。

我想使用 StartDate 和 EndDate 作为日期范围参数,如果我为这两个参数选择相同的日期(单一日期),它应该从该日期返回数据。 感谢任何解决此问题的线索。

【问题讨论】:

  • 样本数据?您使用的是什么日期范围以及您希望出现的日期是什么?查询也会有所帮助。再次阅读您的 cmets,我想我明白您的意思了。开始和结束是 10/5,您希望看到 10/5?如果您的数据不是太大,我会简单地尝试一个CAST 函数。所以一个例子是...WHERE CAST(DateTime as DATE) BETWEEN @Start and @End
  • 为了解释为什么会发生这种情况,日期被隐式转换为日期时间。因此它会过滤 2020-05-10 00:00:00 和 2020-05-10 00:00:00 之间的所有日期时间

标签: sql-server reporting-services ssrs-tablix


【解决方案1】:

使用 DATEADD 函数递增 1 天然后比较

在交易日期列中的基础数据是 DATETIME 值的这种情况下,我只需将参数增加 1 并创建一个小于条件,如下所示:

    DECLARE @StartDate AS DATE
    DECLARE @EndDate AS DATE
    
    SET @StartDate = CAST(GETDATE() AS DATE)
    SET @EndDate = CAST(GETDATE() AS DATE)
    ;
    
 SELECT
    *
FROM
    favorite_table
WHERE
        1 = 1
    AND transactional_dt >= @StartDate
    AND transactional_dt  < DATEADD(d,1,@EndDate );

【讨论】:

  • 谢谢帕特里克。有效。想知道为什么 [DateTime] BETWEEN '10/05/2020' 和 '10/05/2020' [DateTime]>='10/05/2020' AND [DateTime]
  • 由于 DATETIME 列的值大于 '10/05/2020'(例如 1 AM、2 AM),因此条件不会返回这些记录。有些人将 DATETIME 列转换为 DATE,然后它应该可以按您的预期工作(尽管性能可能会受到影响)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多