DATEDIFF具有截止时间

时间:2013-03-11 17:08:40

标签: sql-server tsql datediff

我正在研究房间调度应用程序。我们有这个房间检查规则,我们需要遵循。所有 房间退房时间应该是中午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天。

3 个答案:

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