Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengisi Tarikh Hilang dalam Pertanyaan MySQL Antara Dua Tarikh?

Bagaimana untuk Mengisi Tarikh Hilang dalam Pertanyaan MySQL Antara Dua Tarikh?

Barbara Streisand
Lepaskan: 2024-12-16 22:14:13
asal
531 orang telah melayarinya

How to Populate Missing Dates in MySQL Queries Between Two Dates?

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';
Salin selepas log masuk

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';
Salin selepas log masuk

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';
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan