Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Cekap Mendapatkan Semua Tarikh Antara Dua Tarikh dalam SQL Server?

Bagaimana untuk Cekap Mendapatkan Semua Tarikh Antara Dua Tarikh dalam SQL Server?

Barbara Streisand
Lepaskan: 2025-01-12 10:13:43
asal
691 orang telah melayarinya

How to Efficiently Retrieve All Dates Between Two Dates in SQL Server?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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