Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Julat Tarikh dengan Cekap dalam Pelayan SQL?
Matlamatnya adalah untuk mendapatkan senarai lengkap semua tarikh dalam julat tertentu dari tarikh mula hingga tarikh tamat. Maklumat ini akan disimpan dalam kursor untuk pemprosesan seterusnya.
Untuk menyelesaikan tugasan ini, pertanyaan menggunakan Ungkapan Jadual Biasa (CTE) rekursif dilaksanakan:
<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>
Walau bagaimanapun, ralat berlaku semasa cuba mengisi kursor dengan hasil CTE:
<code class="language-sql">SET @DateCurSor = CURSOR FOR SELECT TheDate FROM GetDates</code>
Mesej ralat menyatakan ralat sintaks berhampiran kata kunci "SET".
Kaedah lain disyorkan iaitu menggunakan kalendar. Jika jadual kalendar tidak wujud, ia boleh dibuat dengan mudah. Jadual ini menyediakan perwakilan jadual tarikh, sangat memudahkan proses mendapatkan semula.
<code class="language-sql">DECLARE @MinDate DATE = '20140101', @MaxDate DATE = '20140106'; SELECT Date FROM dbo.Calendar WHERE Date >= @MinDate AND Date <= @MaxDate;</code>
Jika tiada jadual kalendar, prosedur mudah yang melibatkan jadual sistem sys.all_objects disediakan:
<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>
Menggunakan kursor dalam SQL Server biasanya tidak disyorkan. Sebaliknya, operasi berasaskan set lebih popular kerana prestasi unggulnya. Dalam senario yang diterangkan, tugas menentukan kuantiti item tertentu pada tarikh tertentu boleh dicapai tanpa menggunakan kursor:
<code class="language-sql">SELECT TOP 1 date, it_cd, qty FROM T WHERE it_cd = 'i-1' AND Date BETWEEN @MinDate AND @MaxDate;</code>
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!