我正在使用 SQL 服务器。我想按月计算确切的日期差异。我知道为此有一个内置函数DATEDIFF
,但我想要一些自定义小数差异,例如:
sDate(yyyy-MM-dd) eDate output formula
---------------------------------------------------------------------------------------------------------------
2016-03-03 2016-03-05 0.0967741 3.00/31.00 (daycount/lastday of the month)
2016-03-05 2016-06-05 3.0376343 (27.00/31.00)+(30.00/30.00)+(31.00/31.00)+(5.00/30.00)
2016-02-26 2016-04-03 1.2379310 (4.00/29.00)+(31.00/31.00)+(3.00/30.00)
那么这将如何计算呢?我可以通过使用函数来应用此逻辑,但我不想这样做。如何在单个查询中应用此逻辑?
您的宝贵建议将不胜感激。
在迷你日历表的帮助下,这可以很容易地处理:
rextester 设置:http ://rextester.com/ZHTTZ86931
测试数据:
创建一个迷你日历表来跟踪每个日期及其月份的百分比。
如果您真的不想创建辅助表,则可以使用递归 cte 的替代版本:
然后查询只是加入日历日期介于起始日期和截止日期之间的日历,并对
DayPercentOfMonth
列求和。注意:输出的示例数据值并不像它们看起来那样精确。
由于您已经知道要应用于特定日期差异的公式,为什么不使用简单的CASE表达式并应用您的特定公式。
最后我找到了我的问题的解决方案并在这里发布。我想在一个查询中使用该解决方案,所以下面是解决方案:
首先,我计算不包括两个给定日期的开始月份和结束月份的月份数。然后是从开始日期开始的小数月数和从结束日期开始的相同月数。