Heim  >  Fragen und Antworten  >  Hauptteil

MySQL ruft Datum und Datumsbereich für ein bestimmtes Datum ab (Syntaxfehler)

Das ist mein vollständiger Code, aber wenn ich ihn starte,

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)

Dieser Fehler tritt auf.

Ich möchte eine Liste mit Terminen für April 2022 anzeigen (außer sonntags und samstags)

Zum Beispiel ist das Startdatum der 01.04.2022 Enddatum 30. April 2022

Die Ergebnisse liegen vor->

Datum Datum WD
01.04.2022 (Freitag)
04.04.2022 (Montag)
05.04.2022 (Dienstag)
06.04.2022 (Mittwoch)
07.04.2022 (Donnerstag)
08.04.2022 (Freitag)
11.04.2022 (Montag)
.... ...

Wie kann dieser Code behoben werden? Bitte hilf mir. Danke

*** Ich weiß nicht, wie man Formulare verwendet. Weil ich keine Tabelle habe und nur SQL QUERY verwenden möchte.

P粉637866931P粉637866931236 Tage vor268

Antworte allen(1)Ich werde antworten

  • 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<>小提琴此处

    Antwort
    0
  • StornierenAntwort