我正在做一个房间调度应用程序。我们有这个退房规则,我们需要遵守。所有退房时间应该是中午12点。如果退房日期在下午12点之后,将被视为额外1天。
下面是我的T-SQL代码,返回5天。
SELECT DATEDIFF(day, '3/12/2013 12:00:00 PM', '3/17/2013 3:00:00 PM');
如果您看到上面的代码,则结束日期是下午3:00:00。我如何调整这段代码返回6天而不是5天?
如果我有这个代码呢?
SELECT CEILING(DATEDIFF(SECOND, '3/12/2013 02:00:00 PM' , '3/17/2013 12:50:36 PM') / (24.0 * 60 * 60))
上面的代码仍然返回5天而不是6天。
SELECT CEILING(DATEDIFF(SECOND, '3/12/2013 12:00:00 PM', '3/17/2013 12:00:01 PM') / (24.0 * 60 * 60))
正确的方法是在StartDate和EndDate中减去12小时,然后取day-diff + 1:
declare @dateStart as datetime, @dateEnd as datetime
set @dateStart = cast('20130301 11:59:59 AM' as datetime)
set @dateEnd = cast('20130301 12:01:01 PM' as datetime)
select
@dateStart,
@dateEnd
select days = 1 + datediff(d,@dateStart,@dateEnd)
select
days = 1 + datediff(d, dateadd(hh, -12, @dateStart), dateadd(hh, -12, @dateEnd))
返回:
----------------------- -----------------------
2013-03-01 11:59:59.000 2013-03-01 12:01:01.000
days
-----------
1
days
-----------
2
显然第二个公式是正确的,而不是第一个。
也许你可以计算小时数:
SELECT DATEDIFF(hour, '3/12/2013 12:00:00 PM', '3/17/2013 3:00:00 PM');
因此,123 > 120
(或除以24 - 5.125 > 5
)占6天。