Padding Tarikh Lurus dalam Pertanyaan SQL
Apabila mengambil data daripada jadual MySQL yang termasuk tarikh, adalah perkara biasa untuk menghadapi jurang dalam data yang dikembalikan . Untuk mengisi jurang ini dan mencipta urutan tarikh yang lengkap, terdapat beberapa pendekatan yang tersedia.
Pendekatan Sisi Pelayan MySQL
Satu kaedah berkesan melibatkan mencipta jadual sementara dalam MySQL yang menjangkau julat tarikh yang dikehendaki. Ini boleh dicapai menggunakan prosedur tersimpan berikut:
create procedure sp1(d1 date, d2 date) declare d datetime; create temporary table foo (d date not null); set d = d1 while d <= d2 do insert into foo (d) values (d) set d = date_add(d, interval 1 day) end while select foo.d, count(date) from foo left join table on foo.d = table.date group by foo.d order by foo.d asc; drop temporary table foo; end procedure
Prosedur ini menjana jadual sementara bernama foo yang mengandungi semua tarikh dalam julat yang ditentukan. Anda kemudiannya boleh meninggalkan sertai jadual asal anda dengan foo untuk mengisi tarikh yang tiada dengan kiraan sifar.
Pendekatan Sisi Pelanggan Perl
Jika anda mempunyai akses terhad kepada Pelayan MySQL atau memerlukan lebih fleksibiliti, anda juga boleh mengendalikan padding tarikh pada bahagian klien Perl. Pertimbangkan untuk menggunakan modul seperti Date::Parse atau DateTime::Lite:
use DateTime; my $start_date = '2008-08-05'; my $end_date = '2008-08-07'; my $date_range = DateTime->range(start => $start_date, end => $end_date); for my $date in $date_range->each('day') { print CSV "$date,0\n"; }
Pendekatan ini berulang melalui julat tarikh yang ditentukan dan mencetak tarikh yang tiada dengan kiraan sifar.
Kesimpulan
Bergantung pada situasi khusus anda dan keupayaan pelayan, kedua-dua bahagian pelayan dan pelanggan pendekatan menawarkan pilihan untuk mengalas tarikh kosong dalam pertanyaan SQL. Pendekatan sisi pelayan adalah lebih cekap tetapi memerlukan akses pangkalan data, manakala pendekatan sisi klien memberikan fleksibiliti yang lebih besar tetapi mungkin memerlukan beberapa overhed prestasi.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengisi Tarikh Hilang dalam Pertanyaan SQL Saya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!