【问题标题】:TIME_TO_SEC is not working Correctly in mysqlTIME_TO_SEC 在 mysql 中无法正常工作
【发布时间】:2022-06-15 16:34:40
【问题描述】:

" 选择
SEC_TO_TIME(SUM(TIME_TO_SEC(m.totalTime))) 作为 totalDuration 从米 pd.candidateId = m.candidateId 上的内部连接 ​​pd 其中 m.s_id 不为空 和 pd.s = 1"

OUTPUT :totalDuration: 838:59:59

"select 
       (SUM(TIME_TO_SEC(m.totalTime))/3600)  as totalDuration 
from  m 
inner join pd on pd.candidateId = m.candidateId 
where m.s_Id is not null 
  and pd.s = 1"

输出:总持续时间:1207.7658

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

【问题讨论】:

  • 期望的输出是什么?如果您可以确认 MySQL 中存在错误,请使用他们的错误跟踪器

标签: mysql time sec


【解决方案1】:

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

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

但是,当您除不转换为 TIME 时,则使用原始值进行除法。

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

【讨论】:

    【解决方案2】:

    SEC_TO_TIME() 的范围是 -838:59:59 到 838:59:59。因此,当我们将秒转换为时间时,如果时间大于 838:59:59,在我的情况下它总是会返回 838:59:59 值,这也是同样的问题。 所以我将秒转换为小时除以 3600。

    【讨论】:

    • 请删除此答案中与问题无关的部分。似乎是从其他来源复制粘贴了一些不相关的内容。
    猜你喜欢
    • 1970-01-01
    • 2017-04-30
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多