reporting-services - DateDiff DateInterval.WeekOfYear 返回不一致的结果
问题描述
我在计算删除两个日期之间的周末天数时遇到问题。完整的公式是...
=DateDiff(DateInterval.day, Fields!FromTime.Value, Fields!ToTime.Value) + 1)
- (DateDiff(DateInterval.WeekOfYear, Fields!FromTime.Value, Fields!ToTime.Value) * 2)
- (iif(Weekday(Fields!FromTime.Value) = 7, 1, 0)
- (iif(Weekday(Fields!ToTime.Value) = 6, 1, 0))
- 1)
...但我已将我的具体问题隔离到 DateDiff 部分(DateDiff(DateInterval.WeekOfYear, Fields!FromTime.Value, Fields!ToTime.Value)
),因为这并不总是正确计算差异。
附表(在 DateDiff=1 上过滤)显示了年份周“从”和“到”部分,然后最后一列返回 DateDiff 计算。比较 To/From 周,您可以看到一些超过一周的差异,尽管计算总是返回 1?
解决方案
自己找到了问题的原因,出于某种原因,SSRS 不喜欢对日期和时间字符串进行 DateDiff 周比较(可能幅度太大?)。所以我的解决方案是仅针对日期部分找到 DateDiff,将其转换为秒,然后在秒上从原始 DateDiff 中删除结果。
=DateDiff(Dateinterval.Second, Fields!FromTime.Value, Fields!ToTimeNow.Value, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFullWeek)
- ((DateDiff(DateInterval.WeekOfYear, Fields!FromDate.Value, Fields!ToDate.Value, FirstDayOfWeek.Monday, FirstWeekOfYear.FirstFullWeek) * 2) * 86400)
- iif(Weekday(Fields!FromDate.Value, 1) = 1, 86400, 0)
- iif(Weekday(Fields!FromDate.Value, 1) = 7, 86400, 0)
- iif(Weekday(Fields!ToDate.Value, 1) = 1, 86400, 0)
- iif(Weekday(Fields!ToDate.Value, 1) = 7, 86400, 0)
推荐阅读
- spring-boot - 如何删除tomcat嵌入的依赖项?
- oracle - 插入包含 200 列的表中
- python - for循环字典写入json
- shell - 给定变量的最大值
- javascript - 如何在 React 中悬停时更改文本和 SVG 的颜色?
- sql-server - SQL Server - 基于数据序列和产品代码更新表
- macos - Mac上的Intellij IDEA随机弹出窗口中断编码
- python - 无法完成 mRNA 功能
- c# - 如何在打开新页面的 razor pages .net core 3.1 项目中的剑道网格中添加自定义按钮
- java - 是否有可能与中间生产者建立 Java 流?