【问题标题】:SSRS Report DateTime Parameters Do Not Support Milliseconds - Previews Correctly in Visual Studio But No Records in SSRSSSRS 报告日期时间参数不支持毫秒 - 在 Visual Studio 中正确预览但在 SSRS 中没有记录
【发布时间】: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:172021-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


【解决方案1】:

事实证明,这是 SSRS/PBRS 的限制,它不能(完全)正确处理日期/时间字段,因此如果您的主数据源和参数数据源都引用包含毫秒的相同字段,那么它将无法匹配任何记录,即使它在 Visual Studio 中预览时按预期工作。

由于该表包含数百万条记录,因此从性能的角度来看,字符串转换的成本很高。 DateTime 操作速度最快:

证明最快的是从表中的所有记录中截断毫秒数:

UPDATE TableWithDateField
SET
    TheDateField = DATEADD ( MS, - DATEPART( MS, TheDateField ), TheDateField ) 

第二快的选项是在运行时截断毫秒(例如,如果您无法修改表数据):

WHERE
    DATEADD ( MS, - DATEPART( MS, TheDateField ), TheDateField ) = @DateParameter

希望有一天这个错误会得到修复,并且不再需要解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-15
    • 2022-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多