DATEDIFF四舍五入截止日期小时SQL Server

问题描述:

我的客户有这个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

使用此:

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

添加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

试试这个:

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