如何使用 SQL 產生日期範圍
使用 SQL 時,通常需要在多個日期執行查詢。如果您沒有預先定義的日期列表,這可能會很困難。幸運的是,您可以使用多種技術在 SQL 中產生一系列日期。
一個常見的方法是使用 CONNECT BY 子句。此子句可讓您建立一個分層查詢,該查詢會根據指定的關係產生一系列行。例如,以下查詢將產生過去 365 天的清單:
SELECT TRUNC(SYSDATE - ROWNUM) dt FROM DUAL CONNECT BY ROWNUM < 366
此查詢從目前日期 (SYSDATE) 開始,然後為層次結構中的每一行減去一天。 ROWNUM 偽列追蹤目前行號,CONNECT BY 子句確保查詢在產生 365 行後停止。
產生日期範圍的另一個選項是使用 CROSS JOIN 運算子。此運算符允許您將兩個表組合成一個結果集,即使它們沒有任何匹配的列。例如,以下查詢將產生所有可能的天和小時組合的清單:
SELECT day, hour FROM ( SELECT LEVEL - 1 day FROM DUAL CONNECT BY LEVEL <= 365 ) CROSS JOIN ( SELECT LEVEL - 1 hour FROM DUAL CONNECT BY LEVEL <= 24 )
此查詢首先建立一個天表(第一個子查詢)和一個小時表(第二個子查詢)子查詢)。然後,CROSS JOIN 運算子將這兩個表組合成一個結果集,產生所有可能的日期和小時組合。
最後,您也可以使用預存程序來產生日期範圍。預存程序是一組儲存在資料庫中且可以執行多次的 SQL 語句。下列預存程序將產生最近365 天的清單:
CREATE PROCEDURE generate_dates AS BEGIN FOR i IN 1 .. 365 LOOP INSERT INTO dates (dt) VALUES (TRUNC(SYSDATE - i)); END LOOP; END;
可以透過呼叫下列語句來執行此預存程序:
EXECUTE generate_dates;
一旦儲存程序執行後,您可以執行執行後,您可以使用日期表來執行查詢。
這些只是您可以用來產生日期範圍的一些技術SQL。最適合您的方法將取決於您應用程式的特定需求。
以上是如何使用 CONNECT BY、CROSS JOIN 或預存程序在 SQL 中產生日期範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!