MySQL - 乘以时间类型值 - 有些返回00:00:00

时间:2017-02-26 18:17:02

标签: mysql sql datetime time

我尝试多重播放time类型的字段。有时它有效,有时它不起作用。这是在MySQL的phpmyadmin中。

我已经尝试过的事情:

  • 我试过googling&sql multiplying time type返回00:00:00' 但是对于那些或类似的搜索没有运气。

  • 我运行了一个python脚本,它拉了所有这些时间并将它们相乘 到了6点和11点,所有人都工作了 - 没有00:00:00。

  • 我也试过连续单独做,但它没有用 对于相同的。

以下是我运行此查询之前和之后的图片:

UPDATE journeys, travel_type
SET journeys.jo_duration = journeys.jo_duration * travel_type.tt_duration_multiplier
WHERE journeys.jo_type = travel_type.tt_id

我没有错误。

一些可能有用的信息: Type 1 means 11 - 所以我希望jo_duration中的值乘以11. Type 3 means 6(相同的原则)。 2表示1(所以没有任何变化)。

此表中有更多行存在此问题,但我不想截图整个表格。我认为这应该足够了。总共有70行。当我运行上述查询时,它会说“受影响的47行”#39; (当我认为技术上所有行都应该受到影响时?)。我不确定剩下的是否会受到影响,因为他们会输入2或者他们是否被转为00:00:00(或两者)?

如果您需要更多信息,请随时提问!

如下所示,行jo_id; 1, 3, 4, 6 are 00:00:00。但其他人正确地成倍增加?

有谁知道这是为什么?我怎么能阻止它?

对不起,很长的帖子,我希望我的问题有道理! 谢谢!

在: enter image description here

在: enter image description here

1 个答案:

答案 0 :(得分:0)

您无法直接将数字乘以时间数据类型。

使用函数time_to_sec和sec_to_time:

update journeys, travel_type
set journeys.jo_duration = sec_to_time(
                            time_to_sec(journeys.jo_duration)
                                * travel_type.tt_duration_multiplier
                            mod  86400)
where journeys.jo_type = travel_type.tt_id
如果时间超过一天,

mod 86400可以删除日期部分