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
Tôi cần lấy số ngày trong một vài ngày trên MySQL.
Ví dụ:
12-04-2010
15-04-2010
Chênh lệch ngày sẽ là 3
Câu trả lời:
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-YYYY
giống như bạn đã đăng.
datediff()
phương thức, nếu không, nó sẽ trả về giá trị âm.
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ề 0select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00');
trả về 1select 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.
datediff()
và timestampdiff()
.
Sử dụng DATEDIFF()
chức năng.
Ví dụ từ tài liệu:
SELECT DATEDIFF('2007-12-31 23:59:59','2007-12-30');
-> 1
Tôi thích TIMESTAMPDIFF vì bạn có thể dễ dàng thay đổi đơn vị nếu cần.
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
335
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