Teknik Mendapatkan Julat Tarikh Pelayan SQL
Cabaran: Mendapatkan semula jujukan tarikh dalam julat tertentu dan mengisi kursor dengan cekap.
Kaedah & Isu Awal:
Pendekatan biasa menggunakan Ungkapan Jadual Biasa (CTE) rekursif untuk menjana siri tarikh:
<code class="language-sql">;with GetDates As ( select DATEADD(day,1,@maxDate) as TheDate UNION ALL select DATEADD(day,1, TheDate) from GetDates where TheDate < @minDate )</code>
Walau bagaimanapun, mengisi terus kursor daripada CTE ini selalunya membawa kepada ralat kompilasi.
Penyelesaian:
Pendekatan 1: Menggunakan Jadual Kalendar
Pracipta jadual kalendar menawarkan penyelesaian yang sangat dioptimumkan. Jadual ini menyimpan julat tarikh yang telah ditetapkan, meningkatkan prestasi pertanyaan dengan ketara.
<code class="language-sql">CREATE TABLE Calendar ( Date DATE PRIMARY KEY ); -- Insert dates into the Calendar table (example, adjust as needed) INSERT INTO Calendar (Date) SELECT DATEADD(DAY, n, '20000101') FROM (SELECT TOP 10000 ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) -1 n FROM master..spt_values) AS Numbers;</code>
Mengambil tarikh kemudian menjadi pertanyaan mudah:
<code class="language-sql">SELECT Date FROM Calendar WHERE Date >= @MinDate AND Date <= @MaxDate;</code>
Pendekatan 2: CTE Rekursif Ditapis
Jika jadual kalendar tidak boleh dilaksanakan, CTE rekursif yang diperhalusi boleh digunakan:
<code class="language-sql">DECLARE @MinDate DATE = '20140101'; DECLARE @MaxDate DATE = '20241231'; --Example, replace with your actual date ;WITH DateSeries AS ( SELECT @MinDate AS Date UNION ALL SELECT DATEADD(day, 1, Date) FROM DateSeries WHERE Date < @MaxDate ) SELECT Date FROM DateSeries;</code>
Pengesyoran Kursor:
Adalah penting untuk ambil perhatian bahawa kursor secara amnya kurang cekap daripada operasi berasaskan set. Untuk prestasi optimum, elakkan kursor apabila boleh. Pendekatan CTE di atas, terutamanya menggunakan jadual kalendar, memberikan prestasi yang jauh lebih baik untuk mendapatkan julat tarikh. Pertimbangkan untuk menggunakan ORDER BY
dalam CTE untuk hasil yang boleh diramal jika perlu.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Julat Tarikh dengan Cekap dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!