SQL 獲取SQL Server中兩個日期之間的所有日期

小杨观世界發表於2024-06-22

方法一:使用CTE和日期函式

使用CTE(公共表表示式)和日期函式,可以輕鬆地獲取兩個日期之間的所有日期。

首先,我們建立一個CTE,該CTE的目的是生成一個日期序列。然後,在CTE中使用日期函式生成從開始日期到結束日期的日期序列。最後,我們從CTE中選擇所有的日期。

下面是一個示例查詢,展示瞭如何使用CTE和日期函式獲取從”2022-01-01″到”2022-01-10″之間的所有日期:

WITH DateSequence AS (
    SELECT CAST('2022-01-01' AS DATE) AS DateValue
    UNION ALL
    SELECT DATEADD(DAY, 1, DateValue)
    FROM DateSequence
    WHERE DATEADD(DAY, 1, DateValue) <= CAST('2022-01-10' AS DATE)
)
SELECT DateValue
FROM DateSequence
OPTION (MAXRECURSION 0);

執行以上查詢,我們將得到以下結果:

DateValue
----------
2022-01-01
2022-01-02
2022-01-03
2022-01-04
2022-01-05
2022-01-06
2022-01-07
2022-01-08
2022-01-09
2022-01-10

方法二:使用日期表

如果我們經常需要獲取日期之間的所有日期,我們可以建立一個日期表,該表包含從最小日期到最大日期之間的所有日期。然後,在需要獲取日期之間的所有日期時,我們可以簡單地從日期表中選擇所需的日期。

以下是一個建立日期表的示例:

CREATE TABLE DateTable (
    DateValue DATE
);

DECLARE @StartDate DATE = '2000-01-01';
DECLARE @EndDate DATE = '2030-12-31';

WHILE @StartDate <= @EndDate
BEGIN
    INSERT INTO DateTable (DateValue) VALUES (@StartDate);
    SET @StartDate = DATEADD(DAY, 1, @StartDate);
END;

執行以上查詢,我們將建立一個名為DateTable的表,其中包含從”2000-01-01″到”2030-12-31″之間的所有日期。

現在,我們可以使用以下查詢從日期表中選擇兩個日期之間的所有日期:

SELECT DateValue
FROM DateTable
WHERE DateValue >= '2022-01-01' AND DateValue <= '2022-01-10';

執行以上查詢,我們將得到與上述方法一相同的結果。

方法三:使用遞迴查詢

除了使用CTE,我們還可以使用遞迴查詢來獲取兩個日期之間的所有日期。

以下是一個使用遞迴查詢的示例:

WITH DateSequence AS (
    SELECT CAST('2022-01-01' AS DATE) AS DateValue
    UNION ALL
    SELECT DATEADD(DAY, 1, DateValue)
    FROM DateSequence
    WHERE DATEADD(DAY, 1, DateValue) <= CAST('2022-01-10' AS DATE)
)
SELECT DateValue
FROM DateSequence;

與第一種方法類似,我們使用遞迴查詢生成一個日期序列,然後選擇所需的日期。

出處:SQL 獲取SQL Server中兩個日期之間的所有日期|極客教程 (geek-docs.com)

相關文章