四舍五入分钟到小时和四分之一小时(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)