【问题标题】:How to doing ssrs query with date and time parameters如何使用日期和时间参数进行 ssrs 查询
【发布时间】:2020-06-23 14:15:55
【问题描述】:

我是 SSRS 报告服务的新手,需要帮助,我可以使用以下代码在 sql server 中获取我的数据:

SELECT [name],[Time],[valueX],[valueY] FROM [mybase].[my].[mytable] where Time between '2020-02-21 23:00:00.001' and '2020-02-22 06:59:59.999' order by Time

它手动设置的时间变量,所以没有问题。 当我尝试对我的 SSRS 报告进行查询时,问题就开始了。

如何让日期开始 + 时间开始,如“2020-02-21 23:00:00.001”和日期结束 + 时间结束,如“2020-02-22 06:59:59.999”。

【问题讨论】:

  • 我不明白你在这里问什么。也许您在问如何对 SSRS 报告进行参数化?
  • @Larnu 我的意思是,我尝试使参数日期以时间开始,日期以时间结束。所以从“2020-02-21 23:00:00.001”到“2020-02-22 06:59:59.999”的输出数据。不同的日子。
  • 今天有什么不同?你在这里没有任何意义。
  • @Larnu 我第一天的参数是 2020 年 2 月 21 日晚上 11 点,第二天的参数是 2020 年 2 月 22 日上午 7 点。这不是不同的日子吗??
  • 是的...这就是您在查询中的内容...between '2020-02-21 23:00:00.001' and '2020-02-22 06:59:59.999' 同样,这里有什么问题?你在问什么?

标签: sql-server reporting-services


【解决方案1】:

这里的问题是您的参数化。让我们来回答您的问题:

SELECT [time],
       X,
       Y,
       sensorname
FROM ANM1
WHERE ([time] >= @StartDate)
  AND ([time] <= @EndDate)
  AND (DATEPART(HOUR, [time]) >= @StartHour)
  AND (DATEPART(HOUR, [time]) <= @EndHour)
ORDER BY [time] DESC;

这里有 2 个部分,首先是 ([time] &gt;= @StartDate) AND ([time] &lt;= @EndDate),然后是 AND (DATEPART(HOUR, [time]) &gt;= @StartHour) AND (DATEPART(HOUR, [time]) &lt;= @EndHour)。第一部分很好,您需要 [time] 位于或之后 20200221[time] 位于 20200222 或之前的行。

然而,问题在于后半部分,您希望行中[time] 的小时大于或等于23 并且[time] 的小时部分小于或等于6 .我可以向你保证,没有大于 23 小于 6 的数字。

SSRS 没有原生 Date 时间数据类型,因此我们需要连接这两个值并使用一些混乱的转换:

SELECT [time],
       X,
       Y,
       sensorname
FROM ANM1
WHERE [time] >= CONVERT(datetime2(3),CONCAT(CONVERT(varchar(10),@StartDate,23),'T',CONVERT(varchar(12),@StartHour,114)),126)
  AND [time] <= CONVERT(datetime2(3),CONCAT(CONVERT(varchar(10),@EndDate,23),'T',CONVERT(varchar(12),@EndHour,114)),126);

【讨论】:

  • 我尝试您的查询,它显示错误消息无法将参数值从字符串转换为日期时间,concat 函数需要 2 个参数。我正在使用 sql server-2008
  • 转换对我来说工作正常,@herdinjaya。这表明您通过了无效时间。当然CONCAT 在该查询中有3 个参数,表明您已更改查询。 DB<>Fiddle 如果您更改查询,然后不,它不会像我预期的那样工作。
  • 刚刚注意到 "我正在使用 sql server-2008...CONCAT 是在 SQL Server 2012 中引入的,@herdinjaya。告诉人们您正在使用 完全不受支持软件非常很重要,否则我们会假设您拥有受支持的版本。我强烈建议您查看升级路径,因为 2008 年已经u 支持一年了。您必须将 CONCAT 更改为旧的 + 运算符。
  • 那么如果“CONCAT”在我的 2008 年不起作用,我该如何编写查询??
  • 正如我所说,@herdinjaya “您必须将 CONCAT 更改为旧的 + 运算符。”
猜你喜欢
  • 2015-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多