2013-03-12 179 views
1

我的客戶有這個KTV小時規則所有退房20分鐘以上將被視爲額外的1小時。DATEDIFF四捨五入截止日期小時SQL Server

實施例以下代碼:

declare @dateStart as datetime, @dateEnd as datetime 

    set @dateStart = cast('3/2/2013 8:00:00 PM' as datetime) 
    set @dateEnd = cast('3/2/2013 9:20:02 pm' as datetime) 

    SELECT DATEDIFF(hour, @dateStart, @dateEnd) 

上述代碼邏輯返回1:20小時。在SQL服務器中,它將返回1小時。我怎樣才能調整這個代碼返回2小時?

在此先感謝。

+0

「@ dateStart」總是正好在一個小時內?如果開始是「7:59:59」而結束是「9:00:01」,結果應該如何? – 2013-03-12 07:22:40

回答

4

使用此:

declare @dateStart as datetime, @dateEnd as datetime 

set @dateStart = cast('3/2/2013 8:00:00 PM' as datetime) 
set @dateEnd = cast('3/2/2013 9:20:02 pm' as datetime) 

SELECT CEILING(CAST(DATEDIFF(minute, @dateStart, @dateEnd)as float)/60) 

更多:CEILING

+0

太棒了!謝謝@Iswanto San – user2059064 2013-03-12 06:22:59

+0

@IswantoSan:如果差異小於1:20,則不起作用。它仍然是「細胞」。 – 2013-03-12 06:30:42

+0

@IswantoSan:不符合規範的Bu;它將所有事情都收集起來,而不僅僅是從20分鐘到59分鐘。 – 2013-03-12 06:31:41

0

添加40分鐘消耗的時間,並截斷到小時,如下:

declare @dateStart as datetime, @dateEnd as datetime 

    set @dateStart = cast('3/2/2013 8:00:00 PM' as datetime) 
    set @dateEnd = cast('3/2/2013 9:20:02 pm' as datetime) 


    select Elapsed = datediff(hour, @dateStart, dateadd(minute,40,@dateEnd)) 

回報

Elapsed 
----------- 
2 
+0

您將硬分碼分爲40 .. – 2013-03-12 06:37:40

1

試試這個:

declare @dateStart as datetime, @dateEnd as datetime 

    set @dateStart = cast('3/2/2013 8:00:00 PM' as datetime) 
    set @dateEnd = cast('3/2/2013 9:20:02 pm' as datetime) 

    SELECT DATEDIFF(hour, @dateStart, @dateEnd) 
+ 
case 
when datediff(minute,@dateStart, @dateEnd)%60>=20 then 1 
else 0 
end 

更確切地說,你也可以在這裏添加秒。

+0

@ user2059064:這是否有幫助? – 2013-03-12 06:32:29

+0

+1,但爲什麼不呢:'datediff(分鐘,@ dateStart,@dateEnd)%60> 0'? - 編輯:沒關係,我沒有看到在20分鐘限制頂部的聲明...... – Johan 2013-03-12 08:08:41