Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menunjukkan Semua Tarikh Antara Dua Tarikh, Termasuk Nilai Sifar untuk Tarikh Hilang?

Bagaimana untuk Menunjukkan Semua Tarikh Antara Dua Tarikh, Termasuk Nilai Sifar untuk Tarikh Hilang?

Linda Hamilton
Linda Hamiltonasal
2024-12-23 02:08:10833semak imbas

How to Show All Dates Between Two Dates, Including Zero Values for Missing Dates?

Menunjukkan Semua Data Tarikh Antara Dua Tarikh, Termasuk Nilai Sifar

Apabila bekerja dengan data tarikh, adalah perkara biasa untuk menghadapi senario di mana tidak semua tarikh diwakili dalam set data anda. Ini boleh menyebabkan jurang dalam analisis anda. Untuk menangani isu ini dan memaparkan semua tarikh dalam julat yang ditentukan, kami boleh menggunakan gabungan teknik.

Mari kita pertimbangkan masalah berikut:

Kami mempunyai jadual bernama @temp dengan struktur berikut :

DECLARE @temp TABLE (
    ID INT IDENTITY(1,1) NOT NULL,
    CDate SMALLDATETIME,
    Val INT
)

Data jadual содержит dari 2 Oktober 2012 hingga 15 Oktober, 2012. Walau bagaimanapun, kami ingin mendapatkan semula semua tarikh antara 1 Oktober 2012 dan 15 Oktober 2012 dan memaparkan nilai sifar untuk mana-mana tarikh yang hilang.

Satu pendekatan untuk menangani perkara ini ialah menggunakan ungkapan jadual biasa rekursif (CTE ) dengan jadual kalendar untuk menjana semua tarikh dalam julat yang ditentukan. CTE ditakrifkan seperti berikut:

;WITH d(date) AS (
    SELECT CAST('10/01/2012' AS DATETIME),
    UNION ALL
    SELECT date + 1
    FROM d
    WHERE date < '10/15/2012'
)

CTE ini menjana semua tarikh dari 1 Oktober 2012 hingga 15 Oktober 2012.

Seterusnya, kami menyertai CTE dengan jadual @temp untuk mendapatkan semula nilai yang sepadan untuk setiap tarikh, mengendalikan tarikh yang hilang dengan menggunakan fungsi pengendalian ISNULL NULL, seperti yang ditunjukkan dalam yang berikut pertanyaan:

SELECT t.ID, d.date AS CDate, ISNULL(t.val, 0) AS val
FROM d
LEFT JOIN temp t ON t.CDate = d.date
ORDER BY d.date
OPTION (MAXRECURSION 0)

PILIHAN (MAXRECURSION 0) digunakan untuk mengehadkan bilangan ulangan dalam CTE, memastikan pertanyaan tidak berjalan selama-lamanya. Dengan menetapkan ini kepada 0, ia membenarkan pengulangan tanpa had.

Pertanyaan ini akan menghasilkan hasil yang diingini, memaparkan semua tarikh antara 1 Oktober 2012 dan 15 Oktober 2012, dengan nilai sifar untuk sebarang tarikh yang hilang.

Atas ialah kandungan terperinci Bagaimana untuk Menunjukkan Semua Tarikh Antara Dua Tarikh, Termasuk Nilai Sifar untuk Tarikh Hilang?. 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