Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menjana Senarai Tarikh Dalam Julat Tertentu Tanpa Gelung atau Jadual Sementara?

Bagaimana untuk Menjana Senarai Tarikh Dalam Julat Tertentu Tanpa Gelung atau Jadual Sementara?

Linda Hamilton
Lepaskan: 2025-01-23 17:07:10
asal
889 orang telah melayarinya

How to Generate a List of Dates Within a Specific Range Without Loops or Temporary Tables?

Jana tarikh daripada julat tarikh

Tugas biasa dalam analisis data ialah mengekstrak tarikh tertentu daripada julat tarikh tertentu. Sebagai contoh, anda mungkin perlu mendapatkan semula tarikh dari "2010-01-20" hingga "2010-01-24".

Penyelesaian tanpa gelung atau jadual sementara

Untuk mencapai ini tanpa menggunakan gelung, prosedur atau jadual sementara, kami boleh memanfaatkan subkueri untuk menjana urutan tarikh:

<code class="language-sql">SELECT a.Date
FROM (
    SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a)) DAY AS Date
    FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a
    CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b
    CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c
    CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS d
) a
WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24'</code>
Salin selepas log masuk

Subkueri ini menjana siri tarikh yang merangkumi kira-kira 10,000 hari. Anda boleh melaraskan bilangan hari dengan mengembangkan atau mengurangkan julat dalam subkueri.

Output

Pertanyaan mengembalikan tarikh berikut:

<code>Date
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24</code>
Salin selepas log masuk

Nota Prestasi

Prestasi pertanyaan ini sangat baik, berjalan dalam 0.0009 saat untuk julat 5 hari. Walaupun dengan julat 100,000 hari, ia selesai hanya dalam 0.0458 saat.

Keserasian dan Kemudahalihan

Teknologi ini serasi dengan kebanyakan pangkalan data dengan hanya pelarasan kecil. Sebagai contoh, anda mungkin mahu menggantikan fungsi CURDATE() dengan fungsi yang sepadan dalam pangkalan data khusus anda.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Senarai Tarikh Dalam Julat Tertentu Tanpa Gelung atau Jadual Sementara?. 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