Làm thế nào để có được số ngày chênh lệch giữa hai ngày trên mysql?


162

Tôi cần lấy số ngày trong một vài ngày trên MySQL.

Ví dụ:

  • Ngày nhận phòng là 12-04-2010
  • Ngày trả phòng 15-04-2010

Chênh lệch ngày sẽ là 3

Câu trả lời:


261

Còn hàm DATEDIFF thì sao?

Trích dẫn trang hướng dẫn:

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


Trong trường hợp của bạn, bạn sẽ 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 là YYYY-MM-DD, và không DD-MM-YYYYgiống như bạn đã đăng.


vâng tôi quên mất định dạng ngày khi tôi đặt câu hỏi; cảm ơn bạn
Audel

4
PS 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 thực tiễn.
Ernestas Stankevičius

4
Lưu ý : Đối số thứ nhất phải lớn hơn đối số thứ hai cho datediff()phương thức, nếu không, nó sẽ trả về giá trị âm.
Shashanth

38

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

Như tài liệu nêu:

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

kết quả là

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

trả về 1 thay vì 0 dự kiến.

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

Vài ví dụ:

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

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


kỳ lạ là các đối số được lật xung quanh giữa datediff()timestampdiff().
billynoah



5

Nhận ngày giữa ngày hiện tại đến ngày đích

 SELECT DATEDIFF('2019-04-12', CURDATE()) AS days;

đầu ra

ngày

 335

2
SELECT md.*, DATEDIFF(md.end_date, md.start_date) AS days FROM  membership_dates md

đầu ra ::

id  entity_id    start_date            end_date             days

1   1236      2018-01-16 00:00:00     2018-08-31 00:00:00    227
2   2876      2015-06-26 00:00:00     2019-06-30 00:00:00   1465
3   3880      1990-06-05 00:00:00     2018-07-04 00:00:00   10256
4   3882      1993-07-05 00:00:00     2018-07-04 00:00:00   9130

hy vọng nó sẽ giúp được ai đó trong tương lai

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.