2017-02-26 38 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! –