SQL里用DATEADD减掉一定天数,跳过周六周日两天,计算日期

「已注销」 2017-09-22 12:00:13
SQL里用DATEADD减掉一定天数,跳过周六周日两天,计算日期
,求自定义函数。
比如
DATEADD(D,-2,‘2017-09-18) 应该是 2017-09-16, 但是我希望取到的是2017-09-14
...全文
932 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-09-22
  • 打赏
  • 举报
回复
是的,开始日期不会是周末
听雨停了 2017-09-22
  • 打赏
  • 举报
回复
引用 2 楼 qq_38081061的回复:
周末放假,所以周六周日不会有数据,这个不用考虑
也就是说开始日期不会是周六日,对吧
「已注销」 2017-09-22
  • 打赏
  • 举报
回复
周末放假,所以周六周日不会有数据,这个不用考虑
听雨停了 2017-09-22
  • 打赏
  • 举报
回复
如果开始日期本来就是周六周日呢,比如说开始日期为9-16,9-17那么减去两天的结果是什么呢
吉普赛的歌 2017-09-22
  • 打赏
  • 举报
回复
这个其实不简单, 需要把所有的放假天数排除, 不仅是周末, 还有国庆春节之类的节假日
acen_chen 2017-09-22
  • 打赏
  • 举报
回复
只是固定的减某个数后判断是周六周日再多减还是减固定的工作日数
听雨停了 2017-09-22
  • 打赏
  • 举报
回复
引用 4 楼 qq_38081061 的回复:
是的,开始日期不会是周末

CREATE FUNCTION My_fun(@day INT ,@date DATE)
RETURNS DATE
AS 
BEGIN
	DECLARE @dt DATE,@num INT,@dw INT 
	--计算减去的天数有多少个周末,一个星期按五天计算
	SELECT @num=abs(@day/5)
		
	--得到实际应该减去的天数
	SELECT @day=@day-@num*2
	
	--得到减去相应天数后的日期
	SELECT @dt=DATEADD(d,@day,@date)
	
	--判断减去后的日期是否是周六日,如果是再减去两天
	SELECT @dw=DATEPART(dw,@dt)
	IF(@dw=1 OR @dw=7)
	BEGIN
		SELECT @dt=DATEADD(d,-2,@dt)
	END	
	RETURN @dt
END

SELECT dbo.my_fun(-2,'2017-09-18')
----------
2017-09-14
SELECT dbo.my_fun(-30,'2017-09-18')
----------
2017-08-07
SELECT dbo.my_fun(-5,'2017-09-18')
----------
2017-09-11
这样应该可以,你试试看
繁花尽流年 2017-09-22
  • 打赏
  • 举报
回复
引用 楼主 qq_38081061 的回复:
SQL里用DATEADD减掉一定天数,跳过周六周日两天,计算日期 ,求自定义函数。 比如 DATEADD(D,-2,‘2017-09-18) 应该是 2017-09-16, 但是我希望取到的是2017-09-14
SET DATEFIRST 1;

DECLARE @date DATETIME

SET @date='2017-09-24'

SELECT	CASE	WHEN DATEPART(dw, @date) = 6 THEN DATEADD(dd, 2, @date)
				WHEN DATEPART(dw, @date) = 7 THEN DATEADD(dd, 1, @date)
		ELSE @date END 
试试

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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