2015-12-23 26 views
5

Tôi có hai lần được lưu trong cơ sở dữ liệu nhưSự khác nhau giữa hai chuỗi với thời gian và ngày trong tuần

DayTime1 = "Wed 09:00" 
DayTime2 = "Wed 13:00" 

Tôi muốn nhận được sự khác biệt giữa hai thời điểm này trong vài phút.

TIMESTAMPDIFF(MINUTES,DayTime1,DayTime2) return null 

Tôi không thể vượt qua được. Có cách nào để có được sự khác biệt?

+0

kiểu dữ liệu của DayTime1 và DayTime2 là gì? – Amol

+0

Tại sao thực hiện điều này trong MySQL? – Strawberry

+0

Thông số kỹ thuật của bạn khá mơ hồ. Giả sử hôm nay là Thứ Tư. Sản lượng dự kiến ​​của '' Thứ Ba 23:50 '-' Thứ tư 00: 10'' là gì? 20? -20? Thứ gì khác? –

Trả lời

2

Xin lưu ý, rằng SELECT STR_TO_DATE("Wed 09:00", "%a %H:%i") lợi nhuận 0000-00-0009:00:00 (ít nhất là trên MySql địa phương của tôi 5.5.16). Vì vậy, nếu so sánh các ngày khác nhau, bạn sẽ không nhận được kết quả chính xác.

Nếu được cung cấp một năm và một tuần, tên ngày sẽ được diễn giải thành một ngày thực, do đó so sánh cũng có thể kéo dài vài ngày. Ví dụ: (mặc dù không thực sự thanh lịch, tôi thừa nhận):

SELECT TIMESTAMPDIFF(MINUTE, 
    STR_TO_DATE(CONCAT(YEAR(CURDATE()), WEEKOFYEAR(CURDATE()), ' Tue 09:00'), '%x%v %a %H:%i'), 
    STR_TO_DATE(CONCAT(YEAR(CURDATE()), WEEKOFYEAR(CURDATE()), ' Wed 13:00'), '%x%v %a %H:%i') 
) 
+0

Câu trả lời của bạn là cho tôi kết quả chính xác –

+0

@ Parikshit.S.Shekhawat Tôi khuyên bạn nên chỉnh sửa câu hỏi và giải thích kết quả bạn mong đợi để tất cả điều này có thể giúp đỡ người khác? –

2

Vì bạn cũng bao gồm các php -tag, tôi giả sử một giải pháp PHP được giá trị cũng như:

$daytime1 = "Wed 09:00"; 
$daytime2 = "Wed 13:00"; 
$diff = abs(strtotime($daytime1) - strtotime($daytime2)); //absolute diff in seconds 
$diff = $diff/60; //Difference in minutes 

EDIT:

Và đây là một giải pháp MySQL tinh khiết:

SELECT ABS(
    TIME_TO_SEC(
     TIMEDIFF(
      STR_TO_DATE("Wed 09:00", "%a %H:%i"), 
      STR_TO_DATE("Wed 13:00", "%a %H:%i") 
     ) 
    ) 
)/60 

Tham số thứ hai, "%a %H:%i" là định dạng ngày. Nếu nó luôn ở định dạng "Ba chữ cái đầu tiên của ngày trong tuần, không gian, giờ có số 0 đứng đầu, :, phút" thì bạn có thể sử dụng định dạng này.

+0

Xin lưu ý rằng chuỗi có ngày trong tuần của ngày hôm qua sẽ trả về * ngày * tiếp theo tương ứng với ngày trong tuần đó thay vì ngày hôm qua. Nó có thể là những gì OP muốn hay không. –

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