Mysql HOUR()将-HH转换为HH,这是一个功能还是一个bug?

时间:2012-09-13 21:40:20

标签: mysql time

如果我进行如下查询:

SELECT HOUR( TIMEDIFF('2012-08-12 02:25:00', 
                      '2012-09-14 02:25:33') ) as result

结果是792,即使我从未来的某个日期减去过去的数据。

如果我删除HOUR()并执行:

SELECT TIMEDIFF('2012-08-12 02:25:00', 
                '2012-09-14 02:25:33')  as result

然后值为-792:00:33。因此,显然HOUR()正在将-792转换为792.我已经尝试了其他日期,结果是相同的(总是返回正数小时)。

The manual没有说明这种行为。

这是一个错误,还是我可以依赖的功能出现在最近的所有mysql安装中?

3 个答案:

答案 0 :(得分:5)

有一种方法可以获得正面时间和负面时间。 EXTRACT会得到否定的。

SELECT EXTRACT(HOUR FROM '-01:00:00'), HOUR('-01:00:00')

将返回:

-1    1

答案 1 :(得分:1)

似乎这是一种预期的行为(不能说是bug还是功能)。 参见示例:

mysql> select hour('-23:00:00');
+-------------------+
| hour('-23:00:00') |
+-------------------+
|                23 |
+-------------------+
1 row in set (0.04 sec)

如果您需要从那里获取时间,我建议解析结果(如果可能,在SQL之外)

答案 2 :(得分:-1)

根据手册,TIMEDIFF只能收到TIME个参数,而您正在使用的参数是DATE个值。 试试DATEDIFF