Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menunjukkan Semua Tarikh Antara Dua Tarikh, Termasuk Nilai Sifar untuk Tarikh Hilang?
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!