mssql函数翻译

coder000 2010-05-08 04:37:11
跪求将以下函数翻译为 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
...全文
83 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
coder000 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 acmain_chm 的回复:]
#6楼 ACMAIN_CHM(acmain) 不过还是需要你确定一下 "2009-10-01之后3个工作日的日期 具体是什么日期?"
[/Quote]

是2009-10-6,这里只做了周六周日的跳过,法定的节假日是不做处理的
ACMAIN_CHM 2010-05-18
  • 打赏
  • 举报
回复
[Quote= #6楼 ACMAIN_CHM(acmain) ]不过还是需要你确定一下 "2009-10-01之后3个工作日的日期 具体是什么日期?"[/Quote]
coder000 2010-05-18
  • 打赏
  • 举报
回复
感谢WWWWA!
但我运行时会报错
“1064 you have an error in your sql syntax”
本地版本是mysql5.1
求解
ACMAIN_CHM 2010-05-10
  • 打赏
  • 举报
回复
[Quote]返回2009-10-01之后3个工作日的日期 [/Quote]具体是什么日期? 另外建议多给几个测试用日期。
coder000 2010-05-10
  • 打赏
  • 举报
回复
回楼上

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

剔除周末用的
WWWWA 2010-05-10
  • 打赏
  • 举报
回复
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$$
huxuanhui 2010-05-10
  • 打赏
  • 举报
回复
收藏下 这个函数很有意思
ACMAIN_CHM 2010-05-10
  • 打赏
  • 举报
回复
等一下写一个按照你提供的数据进行测试。
不过还是需要你确定一下 "2009-10-01之后3个工作日的日期 具体是什么日期?"
coder000 2010-05-10
  • 打赏
  • 举报
回复
是这样的:
比如: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
ACMAIN_CHM 2010-05-09
  • 打赏
  • 举报
回复
建议给出功能介绍和你的测试用例

比如 workdayadd('2009-10-01',3) 要求返回 '2009-11-13'
coder000 2010-05-08
  • 打赏
  • 举报
回复
在线等高手

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧