MySQL 5.6.10创建WORKDAYS存储函数时遭遇语法错误求助
解决MySQL WORKDAYS函数的语法错误
看起来你的问题大概率是代码里的HTML转义字符导致的——你写的>是HTML里的大于号转义,但MySQL不认识这个,得换成实际的>符号。另外,给代码添加合理换行和缩进,也能避免解析时的混淆,让逻辑更清晰。
修正后的完整代码如下:
DELIMITER $$ DROP FUNCTION IF EXISTS `WORKDAYS` $$ CREATE FUNCTION `WORKDAYS` (start_date DATETIME, end_date DATETIME) RETURNS INT LANGUAGE SQL DETERMINISTIC BEGIN DECLARE days INT; SET days = 0; REPEAT SET days = days + ( CASE WHEN DAYNAME(start_date) IN ('Friday', 'Saturday', 'Sunday') THEN 0 ELSE 1 END ); SET start_date = DATE_ADD(start_date, INTERVAL 1 DAY); UNTIL start_date > end_date END REPEAT; RETURN days; END $$ DELIMITER ;
几个关键说明:
- 替换了
>为实际的>运算符,这是触发语法错误的核心原因。 - 调整了代码的换行与缩进,让函数结构更直观,也能避免MySQL解析时出现歧义。
- 额外提一句:如果你的需求是计算周一到周五的标准工作日,那CASE判断里应该去掉
'Friday'——目前你的逻辑是把周五也归为非工作日的,这点可以根据实际需求调整。
内容的提问来源于stack exchange,提问作者Vasu
相关产品推荐
相关产品推荐

