我正在研究房间调度应用程序。我们有这个房间检查规则,我们需要遵循。所有 房间退房时间应该是中午12:00。如果退房日期是在下午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天。
答案 0 :(得分:3)
SELECT CEILING(DATEDIFF(SECOND, '3/12/2013 12:00:00 PM', '3/17/2013 12:00:01 PM') / (24.0 * 60 * 60))
答案 1 :(得分:2)
正确的方法是从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
显然,第二个公式是正确的,而不是第一个公式。
答案 2 :(得分:1)
也许你可以数小时:
SELECT DATEDIFF(hour, '3/12/2013 12:00:00 PM', '3/17/2013 3:00:00 PM');
因此,123 > 120
(或除以24 - 5.125 > 5
)会占6天。