我有一个包含一些字段的数据库表,其中一个字段是mysql float type字段。Mysql以小时计得到float字段的总和
在这个领域我保持多久,我是在骑自行车以小时例如
2.3 & 3.3 & 2 = 8小时
2.55 & 2.25 & 1 = 6.20小时
任何想法如何我可以得到所需的总时间?
谢谢
我有一个包含一些字段的数据库表,其中一个字段是mysql float type字段。Mysql以小时计得到float字段的总和
在这个领域我保持多久,我是在骑自行车以小时例如
2.3 & 3.3 & 2 = 8小时
2.55 & 2.25 & 1 = 6.20小时
任何想法如何我可以得到所需的总时间?
谢谢
你的意思是Sum的方法吗?
SELECT SUM(yourColumn) FROM yourTable
或者您的意思是Round而不是?
SELECT Round(SUM(yourColumn)) FROM yourTable
UPDATE 您可以使用此查询,肯定不是最优雅的,但产生你所描述的结果。我也不是普遍的,因为它取决于分数字符。
SELECT
SEC_TO_TIME(SUM(subQuery.HourPart * 60 * 60 + subQuery.MinutePart * 60)) as Result
FROM
(
SELECT
CASE
WHEN CONVERT(yourColumn, char) LIKE '%.%' THEN
CAST(SUBSTRING_INDEX(yourColumn, '.', 1) as unsigned)
ELSE
yourColumn
END as HourPart
,CASE
WHEN CONVERT(yourColumn, char) LIKE '%.%' THEN
CASE
WHEN CONVERT(TimeInHours, char) LIKE '%._' THEN
CAST(SUBSTRING_INDEX(TimeInHours, '.', -1) * 10 as unsigned)
ELSE
CAST(SUBSTRING_INDEX(TimeInHours, '.', -1) as unsigned)
END
ELSE 0
END as MinutePart
FROM
yourTable
) as subQuery
圆不会在我的情况下工作,请参阅我添加的问题的示例 –
解决方法是将您的列的类型更改为TIME
,不要这样。如果你一直在建立一个没有体面的数据库,你只会让自己变得更加困难。
如果将其更改为TIME
列你可以轻松地做一个SUM,它会正确计算它
CEIL
,
FLOOR
,
MOD
功能和
IF
复杂的解决方案运营商。我创建了测试表duration
,其名称为duration
(与测试表相同)。
它具有类型FLOAT
和两个值序列:1)2.3 | 3.3 | 2
,2)2.55 | 2.25 | 1
。
SET @hours_total := (SELECT sum(duration) FROM `duration`),
@hours_main := 0.00, @minutes_total := 0.00,
@hours_rest := 0.00, @minutes_rest := 0.00, @minutes_adjusted := 0.00;
SELECT truncate(hours_main + hours_rest + minutes_adjusted, 2) as result
FROM (
SELECT @hours_main := floor(@hours_total) as hours_main,
@minutes_total := (mod(@hours_total, 1)*100)/60 as minutes_total, -- converted into hours with minutes residue
@hours_rest := floor(@minutes_total) as hours_rest,
@minutes_rest := ceil(60 * mod(@minutes_total, 1)) as minutes_rest,
@minutes_adjusted := IF(@minutes_rest = 60, 1, @minutes_rest/100) as minutes_adjusted
) as calc
针对第一序列(2.3 | 3.3 | 2
)的输出如下所示:
用于第二序列(2.55 | 2.25 | 1
)的输出是这样的:
那么,你想把总和舍入到最近的整数? –
将数据类型更改为DECIMAL – Strawberry
问题中添加的示例 –