2017-02-26 88 views
0

我试图重复显示time类型的字段。有时它有效,有时不起作用。这是在MySQL中的phpmyadmin。MySQL - 乘法时间类型值 - 有些返回00:00:00

事情我已经试过不已:

  • 我曾试着用搜索引擎“SQL乘以时间类型返回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行受到影响'(当所有行在技术上应该受到影响时,我认为?)。我不确定剩余的是否因为类型2而不受影响,或者它们是否转为00:00:00(或两者)?

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

正如您在下面看到的,使用jo_id; 1, 3, 4, 6 are 00:00:00的行。但其他人正确地繁殖?

有谁知道这是为什么?我怎样才能防止它?

对不起,很长的文章,我希望我的问题是有道理的! 谢谢!

前: enter image description here

后: enter image description here

回答

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是那里,如果时间比一天

+0

完美地工作,以去除白天的一部分!我删除了'mod 86400'部分,因为它产生了错误 - '无法识别的关键字。 (近mod)'和'Unrecognized Token。 (接近86400'。非常感谢@GurV! –