这是我的完整代码,但是当我启动它时,
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>