我总共有几分钟,我正在尝试将这些分钟转换为小时和四分之一小时,例如:
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.33
和8.05
。
另一方面,如果您希望小数部分表示四分之一小时数,则:
select @min / 60 + @min % 60 / 15 / 10.0
这会产生8.2
和8.0
。