Mysql取得特定日期的日期和日期範圍(語法錯誤)
P粉637866931
P粉637866931 2024-02-25 19:51:13
0
1
278

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

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粉637866931
P粉637866931

全部回覆(1)
P粉575055974

語法錯誤是因為該範例是為 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。來自文檔: 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 

結果:

日期 日期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>#

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!