Mysql获取特定日期的日期和日期范围(语法错误)
P粉637866931
P粉637866931 2024-02-25 19:51:13
0
1
279

这是我的完整代码,但是当我启动它时,

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学习者快速成长!