四舍五入分钟到小时和四分之一小时(SQL)

四舍五入分钟到小时和四分之一小时(SQL),sql,sql-server,database,tsql,date,Sql,Sql Server,Database,Tsql,Date,我总共有分钟,我正在尝试将这些分钟转换为小时和四分之一小时,例如: 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) 我想你需要

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

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)

我想你需要这个算法:

select @min / 60 + @min % 60 / 100.0
这将以整数形式给出小时数,然后是小数部分中剩余的分钟数,因此对于示例数据,这将分别产生
8.33
8.05

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

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

这将产生
8.2
8.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]);

但是,正如我在问题下方的评论中提到的,这感觉像是一个开始。

这似乎是你想要的,四舍五入到最接近的15分钟,然后将其视为“十进制”小时:

用一个数字来表示分钟数确实有误导性,并且可能导致下游错误,当
8.3
被解释为8.3小时时,也就是498分钟

我强烈建议您将该值表示为适当的
时间
值。您可以使用以下方法生成该文件:

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

是一个DBFIDLE。

您使用的是哪种dbms?@jarlh Microsoft SQL Server Management StudioI我不明白您的第一个示例,0.55小时不是只有两个季度吗?这感觉真是一个奇怪的要求,probabyl是一个问题的开始。提示:解释“对我不起作用”并不是一个特别具体的问题描述。也许这与策略上省略的
@mins
的数据类型有关。
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)