2012-09-13 9 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

マニュアルによれば、TIMEDIFFTIME引数だけを受け取ることができます。代わりに、使用しているものは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

申し訳ありませんが、私はドキュメントをmissreaded。以下を参照してください:http://dev.mysql.com/doc/refman/5.5/en/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 
関連する問題