วิธีรับจำนวนวันแตกต่างระหว่างสองวันใน mysql


162

ฉันต้องการรับจำนวนวันที่มีอยู่ภายในสองสามวันใน MySQL

ตัวอย่างเช่น:

  • วันที่เข้าพักคือ 12-04-2010
  • วันที่ออก 15-04-2010

ความแตกต่างของวันจะเป็น 3

คำตอบ:


262

แล้วฟังก์ชันDATEDIFFล่ะ

การอ้างอิงหน้าคู่มือ:

DATEDIFF () ผลตอบแทน expr1 - expr2 แสดงเป็นค่าในวันจากวันที่หนึ่งไปยังอีก expr1 และ expr2 เป็นวันที่หรือวันที่และเวลาแสดงออก เฉพาะส่วนวันที่ของค่าที่ใช้ในการคำนวณ


ในกรณีของคุณคุณจะใช้:

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

แต่โปรดทราบว่าวันที่ควรเขียนเป็นYYYY-MM-DDและไม่DD-MM-YYYYเหมือนกับที่คุณโพสต์


ใช่ฉันลืมเกี่ยวกับรูปแบบวันที่เมื่อฉันทำคำถาม; p ขอบคุณ
Audel

4
PS YYYY-MM-DD เป็นมาตรฐาน ISO 8601 ดังนั้นทุกคนควรใช้สิ่งนี้ ในทางปฏิบัติมาก
Ernestas Stankevičius

4
หมายเหตุ : อาร์กิวเมนต์แรกต้องมากกว่าอาร์กิวเมนต์ที่สองสำหรับdatediff()วิธีการมิฉะนั้นจะส่งคืนค่าลบ
Shashanth

38

หมายเหตุหากคุณต้องการนับFULL 24 ชม.ระหว่าง 2 วัน Dateiff สามารถส่งคืนค่าที่ไม่ถูกต้องสำหรับคุณ

ตามเอกสารประกอบฯ :

เฉพาะส่วนวันที่ของค่าที่ใช้ในการคำนวณ

ซึ่งส่งผลให้

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

ผลตอบแทน 1 แทนการคาดหวัง 0

โซลูชันกำลังใช้งานselect timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); (โปรดสังเกตลำดับของอาร์กิวเมนต์ที่ขัดแย้งกันเมื่อเปรียบเทียบกับวันที่)

ตัวอย่างบางส่วน:

  • select timestampdiff(DAY, '2016-04-13 11:00:01', '2016-04-14 11:00:00'); ส่งคืน 0
  • select timestampdiff(DAY, '2016-04-13 11:00:00', '2016-04-14 11:00:00'); ส่งคืน 1
  • select timestampdiff(DAY, '2016-04-13 11:00:00', now()); ผลตอบแทนกี่วัน 24 ชั่วโมงเต็มที่ผ่านมาตั้งแต่ 2016/04/13 11:00:00 จนถึงขณะนี้

หวังว่ามันจะช่วยให้ใครบางคนเพราะในตอนแรกมันไม่ชัดเจนว่าทำไมคนลงวันที่คืนค่าซึ่งดูเหมือนจะไม่คาดคิดหรือผิด


แปลกที่ขัดแย้งจะพลิกรอบระหว่างและdatediff() timestampdiff()
billynoah



5

รับวันระหว่างวันที่ปัจจุบันถึงวันที่ปลายทาง

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

เอาท์พุต

วัน

 335

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

เอาท์พุท ::

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

หวังว่ามันจะช่วยใครบางคนในอนาคต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.