2012-09-13 13 views
6

अगर मैं निम्नलिखित जैसे एक प्रश्न कार्य करें:माईस्कल एचओआर() कनवर्ट -एचएच से एचएच, क्या यह एक सुविधा या बग है?

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

वास्तव में यह spec (आपके द्वारा पोस्ट किए गए लिंक में) में पहली वाक्य की तरह व्यवहार करता है: 'समय के लिए समय देता है।' - यह सेकंड को जिस तरह से होना चाहिए! – 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) 

आप घंटे पाने के लिए वहाँ से मैं परिणाम (, बाहर एसक्यूएल संभव हो तो) को पार्स

-1

मैनुअल के मुताबिक, TIMEDIFF केवल TIME तर्क प्राप्त कर सकते हैं, इसके बजाय, जिनका उपयोग आप कर रहे हैं DATE मान हैं। DATEDIFF

+0

यह कहां कहता है? [इस पृष्ठ पर] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff) यह इस उदाहरण को timediff के लिए देता है: 'चुनें TIMEDIFF (' 2008- 12-31 23: 59: 59.000001 ',' 2008-12-30 01: 01: 01.000002 '); ' –

+1

मुझे खेद है, मैंने दस्तावेज़ों को याद किया। यहां देखें: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff कॉपी/पेस्ट: TIMEDIFF() द्वारा लौटाया गया परिणाम इसके लिए अनुमत सीमा तक ही सीमित है समय मूल्य इसलिए, परिणाम एक TIME मान तक ही सीमित है, लेकिन तर्क TIME या DATE और TIME दोनों हो सकते हैं। – alexandernst

5

एक तरह से सकारात्मक और नकारात्मक घंटे पाने के लिए नहीं है की सलाह देते हैं की जरूरत है घंटे। EXTRACT नकारात्मक मिलेगा।

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

वापसी करेंगे:

-1 1 
संबंधित मुद्दे