2012-09-13 37 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 
相關問題