0
select pd.specialization , 
       SEC_TO_TIME(SUM(TIME_TO_SEC(m.totalTime))) as totalDuration 
from mergedVideos m 
inner join professionaldetails pd on pd.candidateId = m.candidateId 
where m.interviewSessionId is not null 
  and pd.specialization = 1

输出

specialization :1       totalDuration: 838:59:59
select pd.specialization , 
       (SUM(TIME_TO_SEC(m.totalTime))/3600)  as totalDuration 
from mergedVideos m 
inner join professionaldetails pd on pd.candidateId = m.candidateId 
where m.interviewSessionId is not null 
  and pd.specialization = 1
specialization:1   totalDuration:1207.7658

我的问题是为什么 TIME_TO_SEC 函数没有像在第一个查询持续时间是 838:59:59 那样返回期望输出,而在 sec 查询中除以 3600 显示不同的结果 1207.7658(hr)

4

2 回答 2

0

时间数据类型的限制 在使用 SEC_TO_TIME() 函数时您应该知道的一件事是时间数据类型有一个限制。时间数据类型限制在 -838:59:59 到 838:59:59 的范围内。因此,如果您传递了一个巨大的秒值,足以跨越此范围,那么您将收到警告。让我们使用以下两个查询来查看此行为。

于 2022-03-04T07:43:57.997 回答
0

SEC_TO_TIME()'838:59:59'如果参数为 3020399或更大,则返回。

在您的情况下,SUM(TIME_TO_SEC(m.totalTime))表达式的值似乎是4347957。它更大,因此函数返回 TIME 数据类型的最大值。

但是,当您将没有转换为 TIME 的情况下除法时,原始值将用于除法。

https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=43166d9756e68c60c9abdbf43136b340

于 2022-03-04T08:04:48.620 回答