跪求将以下函数翻译为 mysql 的语法
CREATE FUNCTION workdayadd( 
@date datetime, --基础日期 
@workday int --要增加的工作日数 
)RETURNS datetime 
AS 
BEGIN 
DECLARE @bz int 
--增加整周的天数 
SELECT @bz=CASE WHEN @workday<0 THEN -1 ELSE 1 END 
,@date=DATEADD(Week,@workday/5,@date) 
,@workday=@workday%5 
--增加不是整周的工作天数 
WHILE @workday<>0 
SELECT @date=DATEADD(Day,@bz,@date), 
@workday=CASE WHEN (@@DATEFIRST+DATEPART(Weekday,@date)-1)%7 BETWEEN 1 AND 5 
THEN @workday-@bz ELSE @workday END 
--避免处理后的日期停留在非工作日上 
WHILE (@@DATEFIRST+DATEPART(Weekday,@date)-1)%7 in(0,6) 
SET @date=DATEADD(Day,@bz,@date) 
RETURN(@date) 
END

解决方案 »

  1.   

    建议给出功能介绍和你的测试用例比如 workdayadd('2009-10-01',3)  要求返回 '2009-11-13'
      

  2.   

    回楼上以上函数功能例如:“workdayadd('2009-10-01',3)”
    返回2009-10-01之后3个工作日的日期,第二个参数也可以用负值,同理得到之前3个工作日的日期剔除周末用的
      

  3.   

    是这样的:
        比如:workdayadd('2010-05-06',3) 返回:2010-05-11
             workdayadd('2010-05-06',-3) 返回:2010-05-03
             workdayadd('2010-05-06',-8) 返回:2010-04-26
             workdayadd('2010-05-06',8) 返回:2010-05-18
      

  4.   

    DELIMITER $$
    CREATE FUNCTION workdayadd(  
    `DATE` DATETIME,workday INT )
    RETURNS DATETIME  
    BEGIN  
    DECLARE bz INT;
    SET bz=IF(workday<0,-1,1);
    SET `DATE`=DATE_ADD(`DATE`,INTERVAL @workday/5 WEEK)  ;
    SET workday=@workday%5;  
    WHILE workday<>0  DO
    BEGIN
    SET `DATE`=DATE_ADD(`DATE`, INTERVAL @bz DAY),  
    @workday=CASE WHEN (@@DATEFIRST+DATEPART(WEEKDAY,@DATE)-1)%7 BETWEEN 1 AND 5  
    THEN @workday-@bz ELSE @workday END  ;
    END;
    END WHILE;
    WHILE (@@DATEFIRST+WEEKDAY(@DATE)+1)%7 IN(0,6)DO
    BEGIN
    SET @DATE=DATEADD(DAY,@bz,@DATE)  
    END;
    RETURN(@DATE)  ;
    END$$
      

  5.   

    感谢WWWWA!
    但我运行时会报错
    “1064 you have an error in your sql syntax”
    本地版本是mysql5.1
    求解