搜尋

首頁  >  問答  >  主體

Mysql取得特定日期的日期和日期範圍(語法錯誤)

這是我的完整程式碼,但是當我啟動它時,

DECLARE @StartDateTime DATETIME
DECLARE @EndDateTime DATETIME

SET @StartDateTime = '2022-04-01'
SET @EndDateTime = '2022-04-29';

WITH DateRange(Dates, DateWD) AS 
(
    SELECT @StartDateTime as Date, DATEPART(WEEKDAY, @StartDateTime) 
    UNION ALL
    SELECT DATEADD(d,1,Dates), DATEPART(WEEKDAY, DATEADD(d,1,Dates)) 
    FROM DateRange 
    WHERE Dates < @EndDateTime
)

SELECT Dates, DateWD
FROM DateRange 
 WHERE DATEWD NOT IN(1,7) AND Dates NOT IN(
 SELECT (HOLI_YEAR + '-' + HOLI_MONTH + '-' + HOLI_DAY) AS DATE
 FROM TB_HOLIDAY_CODE

OPTION (MAXRECURSION 0)

出現這個錯誤。

我想顯示 2022 年 4 月的日期清單(週日和週六除外)

例如)開始日期是 2022-04-01 結束日期為 2022 年 4 月 30 日

結果出來了->

日期 日期WD
2022-04-01 (週五)
2022-04-04 (週一)
2022-04-05 (週二)
2022-04-06 (週三)
2022-04-07 (週四)
2022-04-08 (週五)
2022-04-11 (週一)
.... ...

如何修復此程式碼?請幫幫我。謝謝

*** 我不會使用表格。因為我沒有表,並且我只想使用 SQL QUERY。

P粉637866931P粉637866931331 天前350

全部回覆(1)我來回復

  • P粉575055974

    P粉5750559742024-02-26 11:23:47

    語法錯誤是因為該範例是為 SQL Server 編寫的,而不是為 MySQL 編寫的。它需要一些調整才能與 MySQL 8.x 一起使用:

    1. 您不需要 DECLARE 使用者定義的變數。只需使用 SET 來宣告並指派變數值

    2. DATEADD() 是一個 SQL Server 函數。 MySQL 等效項是 DATE_ADD(日期,INTERVAL 表達式單位)

    3. #DATEPART(weekday,...) 是一個 SQL Server 函數。對於 MySQL,請嘗試 DAYOFWEEK(date)

    4. #最後,在 CTE 中使用關鍵字 RECURSIVE。來自文檔

    SQL

    SET @StartDateTime = '2022-04-01';
    SET @EndDateTime = '2022-04-29';
    
    
    WITH RECURSIVE DateRange(Dates, DateWD) AS
    (
        SELECT @StartDateTime, DayOfWeek(@StartDateTime)
        UNION ALL
        SELECT DATE_ADD(Dates, INTERVAL 1 DAY), DayOfWeek(DATE_ADD(Dates, INTERVAL 1 DAY))
        FROM DateRange
        WHERE Dates < @EndDateTime
    )
    SELECT * 
    FROM   DateRange
    WHERE  DateWDNOT IN(1,7)

    結果:

    日期 日期WD
    2022-04-01 6
    2022-04-04 2
    2022-04-05 3
    2022-04-06 4
    2022-04-07 5
    2022-04-08 6
    2022-04-11 2
    2022-04-12 3
    2022-04-13 4
    2022-04-14 5
    2022-04-15 6
    2022-04-18 2
    2022-04-19 3
    2022-04-20 4
    2022-04-21 5
    2022-04-22 6
    2022-04-25 2
    2022-04-26 3
    2022-04-27 4
    2022-04-28 5
    2022-04-29 6

    db<>小提琴此處#

    回覆
    0
  • 取消回覆