首頁 >資料庫 >mysql教程 >如何在 SQL 中產生多個日期範圍內的所有日期?

如何在 SQL 中產生多個日期範圍內的所有日期?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-05 16:11:43776瀏覽

How to Generate All Dates Within Multiple Date Ranges in SQL?

產生多個日期範圍內的日期

當要求超出單一日期範圍​​時,產生多個日期範圍內的所有日期會帶來挑戰。本文針對此類場景,提供了有效的解決方案。

問題

如提供的SQL Fiddle 所示,任務是產生給定集合的所有日期多個日期範圍,如下所示:

<br>ID START_DATE END_DATE<br>2013 年4 月101 日2013 年 4 月 10 日<br>2013 年 5 月 10 日 2013 年 5 月 10 日<br>

解決方案

解決方案
select 
  A.ID, 
  A.START_DATE+delta dt
from 
  t_dates A, 
  (
     select level-1 as delta 
     from dual 
     connect by level-1 <= (
       select max(end_date - start_date) from t_dates
     )
  )
where A.START_DATE+delta <= A.end_date
order by 1, 2

以下查詢解決了這個問題:

  • 解決方案分解
  • 子查詢創建一個層次結構(使用CONNECT BY)來生成數字序列到日期範圍的最大持續時間。
  • 主查詢將此序列與輸入日期範圍連接起來,新增序列將數字新增至開始日期以產生所有可能的日期。
WHERE 子句確保僅產生每個範圍內的有效日期。

ORDER BY 子句按ID 對輸出進行排序,然後按日期排序.

範例輸出



對於輸入如果提供,查詢將傳回以下輸出:

<br>ID日期<br>101 April, 01 2013<br>101 April, 02 2013<br>101 April, 03 2013<br>101 四月,04 2013年<br>2013年4月101日,2013年5月<br>2013年4月101日,<br>2013年4月7日101號<br>2013年4月101日,2013年4月8日<br>2013年4月101日,2013年9月<br>4月101日,10 2013年2013年5月102日2013年5月102日2013年5月102日

以上是如何在 SQL 中產生多個日期範圍內的所有日期?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn