Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Menjana Urutan Tarikh Dalam Julat Tertentu dalam SQL dengan Cekap?

Bagaimanakah Saya Boleh Menjana Urutan Tarikh Dalam Julat Tertentu dalam SQL dengan Cekap?

DDD
DDDasal
2025-01-23 17:17:14955semak imbas

How Can I Efficiently Generate a Sequence of Dates Within a Specific Range in SQL?

Kaedah yang cekap untuk menjana julat tarikh SQL

Dalam pengaturcaraan pangkalan data, menjana jujukan tarikh dalam julat tarikh tertentu adalah tugas biasa. Contohnya, tanya tarikh antara 20 Januari 2010 dan 24 Januari 2010:

<code class="language-sql">SELECT ... AS days WHERE `date` BETWEEN '2010-01-20' AND '2010-01-24'</code>

Hasil yang dijangkakan ialah:

<code>days
----------
2010-01-20
2010-01-21
2010-01-22
2010-01-23
2010-01-24</code>

Penyelesaian subkueri yang cekap

Penyelesaian yang cekap ialah menggunakan 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>

Pertimbangan Prestasi

Penyelesaian ini sangat berprestasi, dengan masa pelaksanaan pertanyaan hanya 0.0009 saat. Malah menjana 100,000 tarikh (kira-kira 274 tahun), masa pelaksanaan pertanyaan hanya 0.0458 saat.

Kemudahalihan

Teknologi ini sangat mudah alih dan boleh disesuaikan dengan kebanyakan sistem pangkalan data dengan hanya pelarasan kecil.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Urutan Tarikh Dalam Julat Tertentu dalam SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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