Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menjana Julat Tarikh Lengkap dalam SQL, Termasuk Tarikh Hilang dengan Nilai Sifar?

Bagaimana untuk Menjana Julat Tarikh Lengkap dalam SQL, Termasuk Tarikh Hilang dengan Nilai Sifar?

Linda Hamilton
Lepaskan: 2024-12-29 20:35:20
asal
234 orang telah melayarinya

How to Generate a Complete Date Range in SQL, Including Missing Dates with Zero Values?

Menjana Julat Tarikh Lengkap dengan Nilai Hilang

Apabila bekerja dengan data tarikh, selalunya perlu memaparkan semua tarikh dalam julat yang ditentukan, walaupun rekod tiada untuk beberapa tarikh. Bagaimanakah anda mencapai ini dalam SQL, memastikan tarikh yang tiada menunjukkan nilai sifar dalam lajur yang berkaitan?

Pertimbangkan jadual berikut, @temp, dengan data tarikh sampel:

INSERT INTO @temp SELECT '10/2/2012', 1
INSERT INTO @temp SELECT '10/3/2012', 1
INSERT INTO @temp SELECT '10/5/2012', 1
INSERT INTO @temp SELECT '10/7/2012', 2
INSERT INTO @temp SELECT '10/9/2012', 2
INSERT INTO @temp SELECT '10/10/2012', 2
INSERT INTO @temp SELECT '10/13/2012', 2
INSERT INTO @temp SELECT '10/15/2012', 2
Salin selepas log masuk

Untuk mendapatkan semula semua tarikh antara dua tarikh yang diberikan, anda boleh menggunakan pertanyaan berikut:

SELECT * FROM @temp WHERE CDate BETWEEN '10/01/2012' AND '10/15/2012'
Salin selepas log masuk

Walau bagaimanapun, pertanyaan ini hanya akan mengembalikan rekod sedia ada dalam tempoh itu julat tarikh. Untuk memasukkan tarikh yang tiada dengan nilai sifar, anda perlu mencipta julat tarikh yang lengkap dan menyertainya dengan data sedia ada:

;WITH d(date) AS (
  SELECT CAST('10/01/2012' AS DATETIME)
  UNION ALL
  SELECT DATE + 1
  FROM d
  WHERE DATE < '10/15/2012'
  )
SELECT t.ID, d.date 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) -- Use this if your dates are >99 days apart
Salin selepas log masuk

Pilihan nombor MAXRECURSION mengehadkan bilangan lelaran rekursif, memastikan pertanyaan selesai dengan jayanya . Fungsi ISNULL menggantikan mana-mana nilai nol dalam lajur val dengan sifar.

Menggunakan pendekatan ini, anda boleh memastikan bahawa semua tarikh dalam julat yang ditentukan dipaparkan, dengan nilai yang tiada diwakili oleh sifar.

Atas ialah kandungan terperinci Bagaimana untuk Menjana Julat Tarikh Lengkap dalam SQL, Termasuk Tarikh Hilang dengan Nilai Sifar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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