2012-09-13 41 views
6

如果我做一个查询,如下所示:Mysql HOUR()将-HH转换为HH,这是一个功能还是一个错误?

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安装中?

+1

第二条语句抛出一个错误,我:*的时间 '-792:00:33' 的格式错误*请参阅:http://www.sqlfiddle.com /#!2/6eb12/2 –

+0

实际上,它的行为与规范中的第一句话完全相同(在您发布的链接中):'返回时间的小时。' - 它按照它应该的方式省略秒! – alfasin

+0

@a_horse_with_no_name它工作在我的最后,那个网站是运行mysql的吗? –

回答

1

它似乎是一个预期的行为(不能说如果错误或功能)。 见例如:

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

如果你需要得到小时从那里我建议分析的结果(如果可能的话,外面SQL)

-1

根据说明书,TIMEDIFF只能接收TIME参数,相反,您使用的参数值为DATE值。 尝试使用DATEDIFF

+0

它在哪里说的?在[本页](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff)上给出了timediff的例子:'SELECT TIMEDIFF('2008- 12-31 23:59:59.000001','2008-12-30 01:01:01.000002');' –

+1

对不起,我误导了文档。请参阅:http://dev.mysql.com/doc/refman/5.5/zh-cn/date-and-time-functions.html#function_timediff复制/粘贴:TIMEDIFF()返回的结果限于允许的范围TIME值。因此,结果仅限于TIME值,但参数可以是TIME或DATE和TIME。 – alexandernst

5

有一种方式来获得正时和负小时。 EXTRACT将得到负面的。

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

返回结果:

-1 1 
相关问题