從日期範圍產生日期
資料分析中的一項常見任務是從給定的日期範圍中提取特定日期。例如,您可能需要檢索從“2010-01-20”到“2010-01-24”的日期。
無需循環或臨時表的解決方案
為了在不使用循環、流程或臨時表的情況下實現此目的,我們可以利用子查詢來產生日期序列:
<code class="language-sql">SELECT a.Date FROM ( SELECT CURDATE() - INTERVAL (a.a + (10 * b.a) + (100 * c.a) + (1000 * d.a)) DAY AS Date FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS d ) a WHERE a.Date BETWEEN '2010-01-20' AND '2010-01-24'</code>
此子查詢產生一個大約跨越 10,000 天的日期序列。您可以透過擴充或縮小子查詢中的範圍來調整天數。
輸出
查詢回傳以下日期:
<code>Date ---------- 2010-01-20 2010-01-21 2010-01-22 2010-01-23 2010-01-24</code>
效能注意事項
此查詢的效能非常好,對於 5 天的範圍,運行時間為 0.0009 秒。即使範圍為 100,000 天,它也能在短短 0.0458 秒內完成。
相容性與可移植性
此技術與大多數資料庫相容,只需進行少量調整。例如,可能需要將 CURDATE() 函數替換為您特定資料庫中的對應函數。
以上是如何在沒有循環或臨時表的情況下產生特定範圍內的日期清單?的詳細內容。更多資訊請關注PHP中文網其他相關文章!