2009-09-15 35 views
5

Câu hỏi này có liên quan đến this questionThêm phút nhất định để thời gian trong MySQL

Tôi có một lĩnh vực mà là một thời gian lĩnh vực (không cần phải là một lĩnh vực datetime, gây ra một phần ngày làm cho không có ý nghĩa ở đây) . Giá trị tôi muốn thêm vào trong một trường khác, tính bằng phút.

Vì vậy, về cơ bản, tôi muốn thêm phút vào một giá trị thời gian. Tôi đã thử hàm DATE_ADD, nhưng nó hy vọng ngày là một datetime, với tập hợp ngày tháng. Tôi cũng đã thử hàm ADDTIME, nhưng vấn đề ở đây là trường thời gian là toàn bộ phút, và không phải ở định dạng hh: mm: ss, vì vậy nó chỉ thêm nó là giây.

Có ai biết cách để thực hiện việc này không?

[sửa]

Đây là truy vấn hiện tại:

SELECT ADDTIME(startTime, duration * 60), startTime, duration FROM tblAppointment 
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id; 

và đây là kết quả:

+-----------------------------------+-----------+----------+ 
| ADDTIME(startTime, duration * 60) | startTime | duration | 
+-----------------------------------+-----------+----------+ 
| 09:18:00       | 09:00:00 |  30 | 
| 10:09:00       | 10:00:00 |  15 | 
| 09:09:00       | 09:00:00 |  15 | 
| 10:57:00       | 10:30:00 |  45 | 
+-----------------------------------+-----------+----------+ 
+0

Đã thêm một phản hồi cho nhận xét của bạn. – Robban

Trả lời

19

Addtime chắc chắn là con đường để đi ... để chỉ cần thêm một số phút nhất định mà bạn có thể thực hiện như sau:

AddTime('00:00:00', '00:10:00') 

Điều này sẽ thêm 10 phút vào giá trị đầu tiên.

Bạn có thể đọc thêm về dev.mysql.com đây: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_addtime

EDIT:

Ngoài nhận xét của bạn. Nếu bạn nhận được giá trị để thêm ở định dạng mm và không có gì khác, thì bạn có thể phân tích giá trị thời gian bằng hàm SEC_TO_TIME(). Như thế này:

SELECT ADDTIME(startTime, SEC_TO_TIME(duration*60)), startTime, duration 
FROM tblAppointment 
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id; 

Điều này sẽ trả về một thời gian ở định dạng hh:mm:ss phút.

0

Có thể nối ': 00' vào cuối giá trị từ trường phút trước khi chuyển đến TIMEADD? Hoặc cách khác, nhân giá trị bằng 60.

+0

Cả hai đều không hoạt động. Với phiên bản concat, tôi có thời gian như 39:00:00, 25:00:00. – Ikke

+0

Làm thế nào để bạn quản lý điều đó, nếu số phút đến là 00-59? hoặc bạn có những thứ như 39:00 trong lĩnh vực phút của bạn? – Amber

+0

Tôi thực sự không biết. Đây chỉ là những gì tôi đang nhận được. Nhưng phương pháp này sẽ không linh hoạt trong trường hợp bạn có thời lượng lâu hơn 59 phút. – Ikke

0

TL: DR

nhân phút 100, không phải 60

GIẢI THÍCH

Nếu bạn muốn thêm phút ở định dạng MM, giống như nó đang ở trong bạn ví dụ, và tránh chuyển đổi nó sang định dạng HH:MM:SS, bạn nên nhân số phút với 100, chứ không phải 60:

SELECT ADDTIME(startTime, duration * 100), startTime, duration FROM tblAppointment 
JOIN tblThreatment ON tblThreatment.threatmentid = tblAppointment.threatment_id; 

Nó bởi vì như tài liệu MySQL nói:

Ví dụ, bạn có thể nghĩ về '1112' và 1112 như ý nghĩa '11: 12: 00' (12 phút sau 11:00) , nhưng MySQL giải thích chúng là '00: 11: 12 '(11 phút, 12 giây). Tương tự, '12' và 12 được hiểu là '00: 00: 12 '.

Vì vậy, bạn không muốn đếm có bao nhiêu giây, bạn có (ví dụ: 600 = 6 phút, chứ không phải 10 phút như bạn nghĩ)

Nếu bạn muốn thêm 15 hoặc 30 phút, bạn chỉ cần thêm 1500 hoặc 3000, và đó là nó.

0

Một cách đơn giản để thêm & khoảng trừ từ ngày tháng và thời gian là chỉ để sử dụng + hoặc - và từ INTERVAL:

SELECT startTime + INTERVAL 10 MINUTE 

Bạn có thể thêm & trừ giây, phút, ngày, tuần, tháng, vv .. danh sách đầy đủ ở đây https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-add

ngày số học cũng có thể được thực hiện bằng INTERVAL cùng với + hoặc - điều hành:

date + INTERVAL expr unit 
date - INTERVAL expr unit 

INTERVAL expr đơn vị được phép ở hai bên của các nhà điều hành + nếu các biểu hiện trên phía bên kia là một ngày hoặc datetime giá trị. Đối với toán tử - INTERVAL đơn vị expr chỉ được phép ở bên phải, bởi vì nó không làm cho có nghĩa là trừ một ngày hoặc giá trị ngày giờ trong một khoảng thời gian.

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