2012-09-13 19 views
6

Nếu tôi làm một truy vấn như sau:Mysql HOUR() chuyển đổi -HH thành HH, đây có phải là một tính năng hay một lỗi không?

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

kết quả là 792, mặc dù tôi đã trừ một dữ liệu quá khứ từ một ngày trong tương lai.

Nếu tôi loại bỏ HOUR() và làm:

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

Sau đó, giá trị là -792:00:33. Do đó rõ ràng HOUR() đang chuyển đổi -792 thành 792. Tôi đã thử nó với các ngày khác và kết quả là như nhau (luôn luôn là giờ tích cực được trả về).

The manual không nói gì về hành vi này.

Đây có phải là lỗi hay là một tính năng mà tôi có thể dựa vào để có mặt trên tất cả các cài đặt mysql gần đây?

+1

Những tuyên bố thứ hai ném một lỗi cho tôi: * định dạng Xấu cho Time '-792: 00: 33' * Xem: http://www.sqlfiddle.com/#! 2/6eb12/2 –

+0

Thực ra nó hoạt động chính xác như câu đầu tiên trong spec (trong liên kết bạn đã đăng): 'Trả về giờ cho thời gian.' - nó bỏ qua giây theo cách mà nó cần! – alfasin

+0

@a_horse_with_no_name của nó làm việc trên cùng của tôi, là trang web đó chạy mysql? –

Trả lời

1

Dường như đó là hành vi mong đợi (không thể nói nếu lỗi hoặc tính năng). Xem ví dụ:

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

Nếu bạn cần để có được những giờ từ đó tôi khuyên bạn nên phân tích kết quả (nếu có thể, SQL bên ngoài)

-1

Theo hướng dẫn, TIMEDIFF chỉ có thể nhận được TIME đối số, thay vào đó, đối số bạn đang sử dụng là DATE giá trị. Hãy thử với DATEDIFF

+0

Nó nói ở đâu? Trên [trang này] (http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff), nó đưa ra ví dụ này cho timediff: 'SELECT TIMEDIFF ('2008- 12-31 23: 59: 59.000001 ',' 2008-12-30 01: 01: 01.000002 ');' –

+1

Tôi xin lỗi, tôi đã đọc các tài liệu. Xem tại đây: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff Sao chép/dán: Kết quả trả về bởi TIMEDIFF() được giới hạn trong phạm vi được phép cho Giá trị TIME. Vì vậy, kết quả được giới hạn ở một giá trị TIME, nhưng các đối số có thể là cả TIME hoặc DATE và TIME. – alexandernst

5

Có một cách để có được những giờ tích cực và tiêu cực giờ. EXTRACT sẽ nhận được giá trị âm.

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

Sẽ trả lại:

-1 1 
Các vấn đề liên quan