Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL Time Period Query: ดึงข้อมูลวันที่ย้อนหลัง 14 สัปดาห์จากวันปัจจุบัน

การ Query ข้อมูลในช่วงเวลา 14 สัปดาห์ย้อนหลังด้วย DATE_SUB และ CURDATE

ใช้ DATE_SUB(CURDATE(), INTERVAL 14 WEEK) คำนวณวันที่ 14 สัปดาห์ก่อน แล้วใช้ BETWEEN กรองช่วง

รูปแบบคำสั่ง

SELECT * FROM table_name 
WHERE date_column BETWEEN DATE_SUB(CURDATE(), INTERVAL 14 WEEK) AND CURDATE();

ตัวอย่าง: ดึง ArrivalDate ใน 14 สัปดาห์ล่าสุด

1. สร้างตารางและเพิ่มข้อมูล (สมมติวันนี้ 2019-08-31)

CREATE TABLE DemoTable (ArrivalDate DATE);
INSERT INTO DemoTable VALUES 
('2019-04-21'), ('2019-03-01'), ('2019-09-01'), 
('2019-08-31'), ('2019-06-30'), ('2019-06-01');

2. ดูข้อมูลทั้งหมด

SELECT * FROM DemoTable;

ผลลัพธ์:

+-------------+
| ArrivalDate |
+-------------+
| 2019-04-21  |
| 2019-03-01  |
| 2019-09-01  |
| 2019-08-31  |
| 2019-06-30  |
| 2019-06-01  |
+-------------+

3. Query 14 สัปดาห์ย้อนหลัง

SELECT * FROM DemoTable 
WHERE ArrivalDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 14 WEEK) AND CURDATE();

ผลลัพธ์ (CURDATE = 2019-08-31):

+-------------+
| ArrivalDate |
+-------------+
| 2019-08-31  |
| 2019-06-30  |
| 2019-06-01  |
+-------------+

14 สัปดาห์ = 98 วัน → 2019-08-31 - 98 วัน = 2019-05-25 → วันที่ >= 2019-05-25 และ <= 2019-08-31

INTERVAL Units ที่ใช้ได้

การใช้ NOW() แทน CURDATE() (สำหรับ DATETIME)

WHERE datetime_col BETWEEN DATE_SUB(NOW(), INTERVAL 14 WEEK) AND NOW();

ประสิทธิภาพ: ใช้ Index ได้

CREATE INDEX idx_arrival ON DemoTable(ArrivalDate);
-- BETWEEN บน Index Column ใช้ Range Scan ได้ดี

หลีกเลี่ยง Function บน Column

-- ช้า: ไม่ใช้ Index
WHERE DATE(ArrivalDate) BETWEEN ... 

-- เร็ว: ใช้ Index
WHERE ArrivalDate BETWEEN ...
Unitคำอธิบาย
MICROSECONDไมโครวินาที
SECONDวินาที
MINUTEนาที
HOURชั่วโมง
DAYวัน
WEEKสัปดาห์ (7 วัน)
MONTHเดือน
QUARTERไตรมาส (3 เดือน)
YEARปี
SECOND_MICROSECONDวินาที.ไมโครวินาที
MINUTE_MICROSECONDนาที.ไมโครวินาที
MINUTE_SECONDนาที:วินาที
HOUR_MICROSECONDชั่วโมง.ไมโครวินาที
HOUR_SECONDชั่วโมง:นาที:วินาที
HOUR_MINUTEชั่วโมง:นาที
DAY_MICROSECONDวัน.ไมโครวินาที
DAY_SECONDวัน ชั่วโมง:นาที:วินาที
DAY_MINUTEวัน ชั่วโมง:นาที
DAY_HOURวัน ชั่วโมง
YEAR_MONTHปี-เดือน