這是我的完整程式碼,但是當我啟動它時,
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粉5750559742024-02-26 11:23:47
語法錯誤是因為該範例是為 SQL Server 編寫的,而不是為 MySQL 編寫的。它需要一些調整才能與 MySQL 8.x 一起使用:
您不需要 DECLARE
使用者定義的變數。只需使用 SET
來宣告並指派變數值
DATEADD()
是一個 SQL Server 函數。 MySQL 等效項是 DATE_ADD(日期,INTERVAL 表達式單位)
#DATEPART(weekday,...)
是一個 SQL Server 函數。對於 MySQL,請嘗試 DAYOFWEEK(date)
#最後,在 CTE 中使用關鍵字 RECURSIVE
。來自文檔: p>
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<>小提琴此處 p>#