2010-03-22 42 views

Trả lời

171

gì về DATEDIFF chức năng?

Trích dẫn trang của nhãn hiệu:

DATEDIFF() trả về expr1 - expr2 thể hiện dưới dạng một giá trị trong ngày từ một ngày đến khác. expr1 và expr2 là các biểu thức ngày hoặc giờ. Chỉ những phần cập nhật của các giá trị được được sử dụng trong việc tính toán


Trong trường hợp của bạn, bạn muốn sử dụng:

mysql> select datediff('2010-04-15', '2010-04-12'); 
+--------------------------------------+ 
| datediff('2010-04-15', '2010-04-12') | 
+--------------------------------------+ 
|         3 | 
+--------------------------------------+ 
1 row in set (0,00 sec) 

Nhưng lưu ý ngày nên được viết như YYYY-MM-DD, và không DD-MM-YYYY như bạn đã đăng.

+0

vâng tôi quên mất định dạng ngày khi tôi đưa ra câu hỏi, p cảm ơn bạn – Audel

+2

P.S. YYYY-MM-DD là tiêu chuẩn ISO 8601, vì vậy mọi người nên sử dụng điều này. Rất thiết thực. –

+0

** Lưu ý **: Đối số đầu tiên phải lớn hơn đối số thứ hai cho phương thức 'dateiff()', nếu không nó sẽ trả về giá trị âm. – Shashanth

14

Sử dụng chức năng DATEDIFF().

Ví dụ từ tài liệu:

SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30'); 
    -> 1 
4

tôi thích TIMESTAMPDIFF bởi vì bạn có thể dễ dàng thay đổi đơn vị nếu cần thiết.

25

Lưu ý nếu bạn muốn đếm FULL 24h days giữa 2 ngày, dateiff có thể trả về giá trị sai cho bạn.

Như tài liệu khẳng định:

Chỉ những phần cập nhật của các giá trị được sử dụng trong tính toán.

mà kết quả trong

select datediff('2016-04-14 11:59:00', '2016-04-13 12:00:00')

lợi nhuận 1 thay vì dự kiến ​​0.

Giải pháp là sử dụng select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (lưu ý thứ tự ngược của đối số so với datediff).

Một số ví dụ:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); lợi nhuận 0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); lợi nhuận 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now());lợi nhuận bao nhiêu ngày đầy 24h đã trôi qua kể từ 2016/04/13 11:00 : 00 cho đến bây giờ.

Hy vọng nó sẽ giúp ai đó, vì lúc đầu, điều này không rõ ràng tại sao ngày tháng trả lại giá trị dường như là bất ngờ hoặc sai.

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