这是我的完整代码,但是当我启动它时,
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。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
语法错误是因为该示例是为 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
日期
日期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>