MySQL的减法时间在不同的机器上不一致

时间:2008-12-11 23:47:32

标签: mysql date subtraction

我的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的版本略有不同:5.0.27-community-nt与5.0.51b-community-nt。这很可能就是原因。

djt提出了一个很好的观点,即比尔的解决方案没有考虑到会议记录。除了这个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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

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

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;

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

答案 2 :(得分:0)

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

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;