0

我正在开发一个房间调度应用程序。我们有这个我们需要遵循的房间退房规则。所有房间退房时间应为下午 12:00。如果退房日期在 12:00 PM 之后,则将被视为额外 1 天。

下面是我返回 5 天的 T-SQL 代码。

  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 天。

4

3 回答 3

3
SELECT CEILING(DATEDIFF(SECOND, '3/12/2013 12:00:00 PM', '3/17/2013 12:00:01 PM') / (24.0 * 60 * 60))
于 2013-03-11T17:12:03.680 回答
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

显然第二个公式是正确的,而不是第一个。

于 2013-03-11T18:42:18.117 回答
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 天。

于 2013-03-11T17:14:12.163 回答