Mengisi Tarikh Hilang Apabila Mendapatkan Data Antara Dua Tarikh dalam MySQL
Dalam MySQL, apabila memilih data antara dua tarikh menggunakan operator BETWEEN, ia adalah mungkin beberapa tarikh dalam julat yang ditentukan mungkin tidak mempunyai sebarang data yang sepadan. Ini boleh mengakibatkan baris kosong atau tiada dalam hasil pertanyaan.
Pernyataan Masalah:
Pertimbangkan jadual bernama "tbl" dengan data yang dikaitkan dengan tarikh, seperti ditunjukkan di bawah :
Date | Data |
---|---|
2009-06-25 | 75 |
2009-07-01 | 100 |
2009-07-02 | 120 |
Jika kami ingin mendapatkan semula semua data antara '2009-06-25' dan '2009-07-01' menggunakan pertanyaan berikut:
SELECT data FROM tbl WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Pertanyaan hanya akan mengembalikan baris dengan data sedia ada dalam julat yang ditentukan. Ini bermakna tarikh tanpa sebarang data, seperti '2009-06-26', '2009-06-27' dan '2009-06-28', akan diabaikan daripada keputusan.
Penyelesaian: Jadual Kalendar untuk Mengisi Tarikh Hilang
Untuk menangani isu ini dan memasukkan semua tarikh dalam julat tertentu, tidak kira sama ada terdapat data untuknya, kita boleh menggunakan konsep yang dikenali sebagai "jadual kalendar." Jadual ini membantu menjana jujukan tarikh dalam selang waktu tertentu, pada asasnya berfungsi sebagai jadual "pseudo" bagi semua tarikh yang mungkin.
Berikut ialah contoh cara mencipta jadual kalendar dalam MySQL:
-- Create a table with integers from 0 to 9 CREATE TABLE ints (i INTEGER); INSERT INTO ints VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9); -- Generate a sequence of dates from '2009-06-25' to '2009-07-01' SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date FROM ints a JOIN ints b WHERE date BETWEEN '2009-06-25' AND '2009-07-01';
Setelah anda membuat jadual kalendar, anda boleh melakukan gabungan kiri dengan jadual data anda untuk mengisi tarikh yang tiada. Berikut ialah pertanyaan yang dikemas kini:
SELECT cal.date, tbl.data FROM ( SELECT '2009-06-25' + INTERVAL a.i * 10 + b.i DAY AS date FROM ints a JOIN ints b WHERE date BETWEEN '2009-06-25' AND '2009-07-01' ) cal LEFT JOIN tbl ON cal.date = tbl.date WHERE cal.date BETWEEN '2009-06-25' AND '2009-07-01';
Pertanyaan ini mendapatkan semula semua tarikh dalam julat yang ditentukan, termasuk yang tanpa sebarang data dalam jadual "tbl". Tarikh yang tiada data akan mempunyai nilai NULL dalam lajur "data".
Atas ialah kandungan terperinci Bagaimana untuk Mengisi Tarikh Hilang dalam Pertanyaan MySQL Antara Dua Tarikh?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!