首页  >  问答  >  正文

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粉637866931237 天前275

全部回复(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
  • 取消回复