【问题标题】:MySQL - Multiplying Time Type Values - Some return 00:00:00MySQL - 乘以时间类型值 - 有些返回 00:00:00
【发布时间】:2017-07-17 06:32:54
【问题描述】:

我正在尝试多重播放time 类型的字段。有时它有效,有时则无效。这是在带有 MySQL 的 phpmyadmin 中。

我已经尝试过的事情:

  • 我试过谷歌搜索“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 的行。但其他人的乘法正确吗?

有人知道这是为什么吗?以及如何预防?

很抱歉,这篇文章很长,我希望我的问题是有道理的! 谢谢!

之前:

之后:

【问题讨论】:

    标签: mysql sql datetime time


    【解决方案1】:

    您不能直接将数字乘以时间数据类型。

    使用函数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 会删除一天部分

    【讨论】:

    • 完美运行!我删除了“mod 86400”部分,因为它产生了错误 - “无法识别的关键字。 (靠近 mod)'和'无法识别的令牌。 (接近 86400'。非常感谢@GurV!
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多