Helah untuk mendapatkan semua tarikh antara dua tarikh dalam SQL Server
Dalam SQL Server, mendapatkan semua tarikh dalam julat tarikh tertentu berguna untuk tugasan seperti analisis data, pemprosesan tarikh dan penyimpanan rekod. Artikel ini akan memperkenalkan beberapa kaedah untuk mendapatkan urutan tarikh berturut-turut dengan cekap antara dua tarikh tertentu.
Gunakan ungkapan jadual biasa rekursif (CTE)
Salah satu cara ialah menggunakan CTE rekursif. Contohnya adalah seperti berikut:
<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 ) select TheDate from GetDates</code>
Namun, semasa CTE ini berfungsi untuk memilih tarikh, ia menjadi sukar kerana ralat penyusunan semasa cuba menyimpan hasil ke dalam kursor.
Kaedah alternatif
Untuk meningkatkan kecekapan dan memudahkan operasi, pertimbangkan alternatif berikut:
1. Gunakan jadual tarikh
Jika anda membuat jadual tarikh lebih awal, pertanyaan menjadi sangat mudah:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date <= @MaxDate;</code>
2. Hasilkan jujukan tarikh tanpa jadual tarikh
Jika anda tidak mempunyai jadual tarikh, anda boleh menjana jujukan tarikh secara dinamik menggunakan teknik berikut:
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT TOP (DATEDIFF(DAY, @MinDate, @MaxDate) + 1) Date = DATEADD(DAY, ROW_NUMBER() OVER(ORDER BY a.object_id) - 1, @MinDate) FROM sys.all_objects a CROSS JOIN sys.all_objects b;</code>
3. Elakkan menggunakan kursor untuk lelaran tarikh
Lazimnya disyorkan untuk mengelak daripada menggunakan kursor untuk lelaran tarikh. Pendekatan berasaskan pengumpulan biasanya lebih cekap dan berskala. Contohnya, jika anda ingin mendapatkan semula kuantiti untuk tarikh tertentu, anda boleh menggunakan pertanyaan berikut:
<code class="language-sql">SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date = '20140101';</code>
Dengan mengelakkan penggunaan kursor dan memanfaatkan teknik alternatif ini, anda boleh mendapatkan semula semua tarikh dengan cekap dalam julat tertentu dalam SQL Server.
Atas ialah kandungan terperinci Bagaimana untuk Cekap Mendapatkan Semua Tarikh Antara Dua Tarikh dalam SQL Server?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!