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

วิธีสร้างลำดับวัน (Generate Days) จากช่วงวันที่ใน MySQL

ใช้คิวรีที่รวม ADDDATE() กับตารางตัวเลขเสมือน (derived table) เพื่อสร้างลำดับวันที่ ตัวอย่างสร้างวันระหว่าง 2016-12-15 ถึง 2016-12-31:

mysql> SELECT * FROM (
    -> SELECT ADDDATE('1970-01-01', t4*10000 + t3*1000 + t2*100 + t1*10 + t0) gen_date FROM
    -> (SELECT 0 t0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0,
    -> (SELECT 0 t1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1,
    -> (SELECT 0 t2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
    -> (SELECT 0 t3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3,
    -> (SELECT 0 t4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4
    -> ) v
    -> WHERE gen_date BETWEEN '2016-12-15' AND '2016-12-31';
+------------+
| gen_date   |
+------------+
| 2016-12-15 |
| 2016-12-16 |
| ...        |
| 2016-12-31 |
+------------+
17 rows in set (0.30 sec)

เทคนิคนี้ใช้ตารางตัวเลข 0-9 รวม 5 ตำแหน่ง สร้างจำนวน 0-99999 แล้วแปลงเป็นวันที่ด้วย ADDDATE จาก epoch