我有一个包含以下信息的预订表:
BookingID,(唯一,不为null)StartDate,(不为null)EndDate(不为null)
我需要计算可以在某人居住的夜晚数,可以使用EndDate和StartDate之间的DATEDIFF进行计算。但是,如果某人在31天的一个月中居住了整个月,我们只会向他们收费30。
我不确定如何在SQL中执行此操作。我当时想我必须创建一个变量,按月计算并添加到变量中,但这似乎很麻烦并且需要很长时间,尤其是在年底之前。每天大约需要进行5,000条记录。
因此:如果某人开始于7/25/14并结束9/2/14,则夜晚为38而非39。如果某人开始于10/2/14并结束于11/1/14,则夜晚为30。某人开始于10/2/14,结束于10/31/14,夜晚为29。
我们将对未来进行计算,因此结束日期是否大于报表的发布日期都没有关系。
有谁知道如何以最佳方式实现这一目标?
我首先要创建一个查找表,其中包含31天的所有月份
如
DECLARE @month TABLE (start_date date,end_date date)
INSERT INTO @month VALUES ('2014-07-01','2014-07-31'),('2014-08-01','2014-08-31'),('2014-10-01','2014-10-31'),('2014-12-01','2014-12-31')
//populate all months in your calculate range
然后您可以使用
DECLARE @start DATE = '2014-07-25', @end DATE = '2014-09-02'
SELECT DATEDIFF(day,@start,@end) -
(SELECT COUNT(*) FROM @month WHERE start_date >= @start AND end_date <= @end)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句