2010-06-16 57 views
21

Làm thế nào để tính tổng thời gian của colonne của tôi được gọi là "timeSpent" có định dạng này: HH: mm trong SQL? Tôi đang sử dụng MySQL.tính tổng thời gian loại bằng cách sử dụng sql

loại cột của tôi là Thời gian.

nó có cấu trúc

 
TimeFrom like 10:00:00   12:00:00  02:00:00 
TimeUntil  08:00:00   09:15:00  01:15:00 
Time spent  

total time 03:15:00 
+0

RDBMS: mysql. truy vấn chọn SUM (timespent) từ mytablename doen't làm việc như tôi muốn nếu tổng là 02: 10:30 nó được hiển thị 021030. – kawtousse

+0

bạn có nghĩa là u có 2 cols timefrom và thời gian cho đến khi? cơ sở dữ liệu của bạn là gì? 'SELECT tổng (DATEDIFF (phút, timeFrom, timeUntil)) từ TableName' – Inv3r53

+0

nó được gây ra bởi thời gian loại. nó cần một chức năng cụ thể tôi không biết xin vui lòng giúp đỡ. – kawtousse

Trả lời

0

này Nếu kiểu dữ liệu của cột timeSpentTIME bạn sẽ có thể sử dụng các truy vấn sau đây:

SELECT SUM(timeSpent) 
    FROM YourTableName -- replace YourTableName with the actual table name 

Tuy nhiên, nếu đó không phải là trường hợp , bạn có thể phải sử dụng dàn diễn viên để chuyển đổi thành loại dữ liệu Time. Một cái gì đó như thế này nên làm việc:

SELECT SUM(timeSpent - CAST('0:0:0' as TIME)) 
    FROM YourTableName -- replace YourTableName with the actual table name 
+0

không chính xác điều này chạy một ngoại lệ – kawtousse

+0

hmm .. bạn có thể đăng định nghĩa bảng và truy vấn mà bạn có cho đến nay không? –

0

Trong MySQL, bạn sẽ làm một cái gì đó như thế này để có được những khoảng thời gian:

SELECT TIMEDIFF('08:00:00', '10:00:00'); 

Sau đó, để thêm các khoảng thời gian, bạn sẽ làm gì:

SELECT ADDTIME('01:00:00', '01:30:00'); 

Thật không may, bạn không lưu trữ ngày hoặc sử dụng thời gian 24 giờ, do đó, các tính toán này sẽ kết thúc không chính xác vì TimeUntil của bạn thực sự thấp hơn TimeFrom.

cách tiếp cận sẽ được (giả sử bạn sắp xếp ra vấn đề ở trên) để lưu trữ các khoảng thời gian như giây sử dụng TIMESTAMPDIFF():

UPDATE my_table SET time_spent=TIMESTAMPDIFF(start, end)); 
SELECT SEC_TO_TIME(SUM(time_spent)) FROM my_table; 
50
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`timeSpent`))) AS timeSum 
FROM YourTableName 

này đã làm việc cho tôi. Hi vọng điêu nay co ich.

+0

Mất rất nhiều vòng tìm kiếm trên web và đây là câu trả lời tôi đang tìm kiếm. Cảm ơn! – Sevenearths

+0

Cảm ơn bạn, đây là câu trả lời đúng –

+0

điều này sẽ tạo ra kết quả sai. –

1

100% mã làm việc để có được tổng thời gian ra khỏi cơ sở dữ liệu MYSQL:

SELECT 
SEC_TO_TIME(SUM(time_to_sec(`db`.`tablename`))) 
As timeSum 
FROM 
`tablename` 

Hãy thử và xác nhận. Cảm ơn.

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