将分钟舍入为小时和四分之一小时 (SQL)



我总共有几分钟,我正在尝试将这些分钟转换为小时和四分之一小时,例如:

513 minutes / 60 = 8.55 -> so would be 8.3 hours
485 minutes / 60 = 8.083 -> 8 hours

如何使用 SQL 执行此操作?

我一直在寻找,我找到的是这个,但对我不起作用:

@mins是我存储分钟数的变量。

set @mins = dateadd(minute, datediff(minute,0,@mins) / 15 * 15, 0)

假设您不能有 24 小时或更长时间的时间,您可以执行以下操作:

SELECT CONCAT(DATEPART(HOUR,T.[Time]),'.',DATEPART(MINUTE,T.[Time]) /10)
FROM (VALUES(513),(485),(107))V(YourColumn)
CROSS APPLY(VALUES(DATEADD(MINUTE, YourColumn, CONVERT(time(0),'00:00')))) T([Time]);

但是,就像我在问题下的评论中提到的,这感觉就像是XY问题的开始。

这似乎可以满足您的需求,四舍五入到最接近的 15 分钟,然后将其视为"十进制"小时:

select mins / 60 + (((mins % 60)) / 15) * 0.15
from (values (513), (485)) v(mins)

使用数字来表示分钟确实具有误导性,并且可能导致下游错误,当8.3被解释为 8.3 小时时 - 即 498 分钟。

我强烈建议您将该值表示为适当的time值。 您可以使用以下方法生成该版本:

timefromparts(mins / 60, (((mins % 60)) / 15) * 15, 0, 0, 0)

这是一个数据库<>小提琴。

DECLARE @MinutesTotal   int
DECLARE @QuatersTotal   int
DECLARE @HoursOut       int
DECLARE @QuatersOut     numeric(10,2)
SET @MinutesTotal   =   
--      513 --  8:30 
--      485 --  8:00 
166 --  2:45    
SET @QuatersTotal   =   @MinutesTotal / 15                          
SET @HoursOut       =   @QuatersTotal /  4                          
SET @QuatersOut     =   (@QuatersTotal - (@HoursOut * 4)) * 15

DECLARE @ResultTime time = '00:00'
SET     @ResultTime = DATEADD(HOUR  , @HoursOut     , @ResultTime)
SET     @ResultTime = DATEADD(MINUTE, @QuatersOut   , @ResultTime)
SELECT  
@ResultTime 
,   ResultAsString  =   CONVERT(varchar(5), @ResultTime )
,   ResultAsDecimal =   @HoursOut + (@QuatersOut / 100)

我认为你想要这个算术:

select @min / 60 + @min % 60 / 100.0

这为您提供了整数的小时数,后跟小数部分中的剩余分钟数,因此对于您的示例数据,这分别产生8.338.05

另一方面,如果您希望小数部分表示四分之一小时数,则:

select @min / 60 + @min % 60 / 15 / 10.0

这会产生8.28.0

最新更新