Bijak menjana julat tarikh MySQL tanpa jadual kalendar
Fungsi generate_series()
PostgreSQL boleh menjana julat tarikh dengan mudah. Walau bagaimanapun, MySQL tidak mempunyai fungsi setara langsung. Artikel ini menyediakan penyelesaian untuk membantu anda melaksanakan fungsi serupa dalam MySQL.
Cabaran
Selalunya perlu melakukan pertanyaan yang melibatkan penggabungan data dengan julat tarikh yang lengkap. Walau bagaimanapun, tugas ini boleh membosankan jika pangkalan data anda tidak mempunyai jadual kalendar tertentu.
Penyelesaian MySQL
Buat julat tarikh dalam MySQL menggunakan jadual contoh yang disediakan:
<code class="language-sql">SELECT DATE_FORMAT( ADDDATE('2011-1-1', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365;</code>
Penerangan
Pertanyaan ini menjana julat tarikh dari '2011-01-01' hingga '2011-12-31' menggunakan langkah berikut:
任意表
digunakan sebagai rujukan untuk mencipta julat nombor garis maya dari -1 hingga 364 (-1 hingga 365 untuk tahun lompat). ADDDATE()
menambah bilangan hari yang sesuai pada tarikh mula. DATE_FORMAT()
Fungsi memformat tarikh yang dijana ke dalam format 'YYYY-MM-DD' yang diperlukan. Integrasi
Pertanyaan ini boleh digunakan sebagai subkueri dalam pertanyaan utama untuk digabungkan dengan jadual asal anda. Contohnya:
<code class="language-sql">SELECT t.日期, COALESCE(d.qty, 0) AS qty FROM ( SELECT DATE_FORMAT( ADDDATE('2011-1-1', @num := @num + 1), '%Y-%m-%d' ) AS 日期 FROM 任意表, (SELECT @num := -1) AS num LIMIT 365 ) AS t LEFT JOIN 原始表 AS d ON t.日期 = d.日期;</code>
Pertanyaan ini akan mengembalikan hasil yang diingini, di mana baris dengan tarikh yang tiada akan diisi dengan nilai qty '0'.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Julat Tarikh dalam MySQL Tanpa Jadual Kalendar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!