【发布时间】:2021-10-21 02:00:50
【问题描述】:
我开发了一个使用日期时间参数的 SSRS 报告,当在 Visual Studio 中预览此报告时,它可以正常工作,但一旦部署到 SSRS,它不会显示任何所选日期的记录。
我发现 SSRS 会截断一个日期时间参数,因此如果数据库中的值为 2021-08-19 07:49:17.977,它会更改为 2021-08-19 07:49:17 丢失毫秒数。
如果我将数据库中的一些记录更改为2021-08-19 07:49:17.000,那么它会起作用并且这些记录会出现。
有什么方法可以阻止 SSRS 减少日期时间参数的毫秒数,因为这使得无法准确匹配,因为它将 2021-08-19 07:49:17 与 2021-08-19 07:49:17.977 进行比较,因此找不到任何记录。
一种解决方法是使用 format 命令将日期时间字段转换为不带毫秒的文本,然后再次返回日期时间字段,或者减去毫秒部分,但这并不理想,数百万行会影响速度和性能.
例如改变这个
FD.ILRReturnDate = @ILRReturnDate
到这里:
DATEADD ( MS, - DATEPART( MS, FD.ILRReturnDate ), FD.ILRReturnDate ) = @ILRReturnDate
这是一个已知问题还是错误?我已经搜索过,但没有找到任何真正相关的内容。
谢谢 罗宾
【问题讨论】:
-
我要在这里问一个“愚蠢”的问题,但您为什么要求您的用户输入精确到 1/300 秒的日期和时间值?
-
这不是他们输入的值。一个 SQL 查询填充该表中可能的日期,另一个是主报告的 SQL,它显示所选日期的详细信息,但由于截断毫秒,即使它在两种情况下都是相同的字段,也不匹配.
-
尝试使用明确格式的字符串类型(例如
yyyy-MM-ddThh:mm:ss.mmm)。 -
字段的格式是什么,几年前我有类似的问题,但归结为字段格式不包括毫秒。 yyyy-mm-dd hh:mm:ss:fff 是我认为的格式。
-
between和>= and <=不好吗?
标签: sql-server datetime reporting-services parameters