0

RoomSchedulingアプリケーションに取り組んでいます。このルームチェックアウトルールには、従う必要があります。すべての部屋のチェックアウトは12:00PMである必要があります。チェックアウト日が午後12時以降の場合は、追加の1日と見なされます。

以下は、5日を返す私のT-SQLコードです。

  SELECT DATEDIFF(day, '3/12/2013 12:00:00 PM', '3/17/2013 3:00:00 PM'); 

上記のコードが表示されている場合、終了日は午後3時00分00秒です。このコードを微調整して、5日ではなく6日を返すにはどうすればよいですか?

このコードがある場合はどうなりますか?

  SELECT CEILING(DATEDIFF(SECOND, '3/12/2013 02:00:00 PM' , '3/17/2013 12:50:36 PM') / (24.0 * 60 * 60))

上記のコードは、6日ではなく5日を返します。

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時間を引いてから、日差+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番目の式が正しいです。

于 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 に答える