【问题标题】:Subtraction of MySQL times inconsistent on different machines不同机器上MySQL时间减法不一致
【发布时间】:2010-09-26 13:30:28
【问题描述】:

我的 MySQL 查询结构如下:

SELECT time(c.start_time),
       time(c.end_time),
       time(c.end_time) - time(c.start_time) as 'opening_hours' 
FROM my_shop c;

开始和结束时间的数据分别是1970-01-01 07:00:00和1970-01-01 19:00:00。

在我的本地机器上,这个查询返回:

| 07:00:00 | 19:00:00 | 12 |

但是在远程机器(生产)上它正在返回

| 07:00:00 | 19:00:00 | 120000 |

关于为什么会发生这种情况以及如何解决它的任何想法?

两组数据是相同的,据我所知,两个 MySQL 安装也是相同的。

非常感谢任何帮助。

更新:

似乎 MySQL 的版本略有不同:5.0.27-community-nt 与 5.0.51b-community-nt。这很可能是原因。

djt 提出了一个很好的观点,即 Bill 的解决方案没有考虑分钟数。以及这个 djt 的解决方案并不是我所需要的。

所以我猜这个问题已经演变成如何减去两次,包括分钟,这样:

1970-01-01 19:00:00 - 1970-01-01 07:00:00 = 12 
1970-01-01 19:00:00 - 1970-01-01 07:30:00 = 11.5
1970-01-01 19:00:00 - 1970-01-01 07:45:00 = 11.25

等等

【问题讨论】:

    标签: mysql date subtraction


    【解决方案1】:

    我会这样做:

    SELECT TIME(c.start_time),
           TIME(c.end_time),
           EXTRACT(HOUR FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time)))
             AS 'opening_hours' 
    FROM my_shop c;
    

    【讨论】:

    • 这将在所需的机器上运行。理想情况下,我不想更改代码,但我想如果这是唯一的解决方案,那就这样吧。我仍然很想知道为什么会发生这种情况,尽管这很令人困惑。
    • 我不确定。我建议在每台机器上验证 MySQL 的版本。 “选择版本();”
    • 对不起,我在提交之前没有看到您的答案。我们的解决方案类似,但我认为您的解决方案不会显示部分时间(例如,如果结束日期是 19:30)。
    • 你是对的,它只会将整小时显示为整数。但这正是 OP 所要求的。
    【解决方案2】:

    通常导致不同输出的相同方法给人的印象是它要么是不同的服务器配置或版本。我真的无法提供帮助,但可能值得在您的查询中尝试以下方法:

    SELECT TIME(c.start_time),
           TIME(c.end_time),
           TIMEDIFF(TIME(c.end_time), TIME(c.start_time)) as 'opening_hours'
    
    FROM my_shop c;
    

    这将为您提供开放时间、分钟和秒的格式化时间戳。

    【讨论】:

    • 有趣,这会产生“12:00:00”,我猜这是我的查询在没有冒号的特定机器上返回的内容。也许 MySQL 的配置中有一个不同的日期格式设置。有什么想法吗?
    【解决方案3】:

    有没有比这更好的解决方案:

    SELECT EXTRACT(HOUR FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time))) 
    + ((EXTRACT(MINUTE FROM TIMEDIFF(TIME(c.end_time), TIME(c.start_time))))/60)
    FROM my_shop c;
    

    【讨论】:

    • 你知道你可以做 EXTRACT(HOUR_MINUTE FROM ...) 吗?
    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 2014-11-04
    • 2014-08-17
    • 1970-01-01
    相关资源
    最近更新 更多