如何在某天上加5个工作日
DATEADD(day, 5, table1.someday) 这样只能得到表日期字段的5天以后
我希望得到的是5个工作日就是说如果是周末就跳过不计
问题点数:50、回复次数:15Top
1 楼j9988(j9988)回复于 2002-11-08 11:51:43 得分 0
select * from table1
where datepart(dw,table1.someday) between 2 and 6Top
2 楼chump(木人)回复于 2002-11-08 12:36:23 得分 0
楼上讲的好!Top
3 楼sky_blue(蓝天2007)回复于 2002-11-08 13:12:02 得分 0
是不是说 星期六和星期日+5都应该是星期5啊?
这个问题很有趣
Top
4 楼sky_blue(蓝天2007)回复于 2002-11-08 13:15:22 得分 0
另外,除了加5,你会不会有加30这样的要求?Top
5 楼sky_blue(蓝天2007)回复于 2002-11-08 13:23:51 得分 0
拿这几天做比较吧
2002-11-8 + 5 =2002-11-15
2002-11-8 + 6 = 2002-11-18
2002-11-9 + 5 = 2002-11-18
2002-11-10 + 5 = 2002 -11-18
2002-11-11 + 5 = 2002 -11-18
这样对不对?
问题是如果是周六或者周日,你把他看成周一呢还是周五呢?
我上边的例子是看成周1的。Top
6 楼ww3347(新来的)回复于 2002-11-08 13:30:58 得分 0
有意思,可是不很明白意思,会有周六、日也加5个工作日的情况吗?这种加给个例子吧。
Top
7 楼sky_blue(蓝天2007)回复于 2002-11-08 14:03:27 得分 0
create function add_date (@a datetime, @b int) returns datetime
as
begin
declare @b1 int
declare @b2 int
declare @b3 int
select @b1=@b/5
select @b2=@b%5
select @b3=@b2 + datepart(dw,@a)
if ( @b3 >5 )
begin
select @b2= @b2 +2
end
return (dateadd(dd,(@b1*7+@b2),@a))
end
go
select dbo.add_date(getdate()+1,5)Top
8 楼sky_blue(蓝天2007)回复于 2002-11-08 14:03:56 得分 0
SET DATEFIRST 1Top
9 楼sky_blue(蓝天2007)回复于 2002-11-08 15:24:32 得分 30
create function add_date (@a datetime, @b int) returns datetime
as
begin
declare @b1 int
declare @b2 int
declare @b3 int
declare @dayofweek int
select @dayofweek = datepart(dw,@a) + @@datefirst - 1
if @dayofweek > 7 select @dayofweek = @dayofweek - 7
if @dayofweek > 5
begin
select @a =dateadd (dd,8-@dayofweek,@a)
end
select @dayofweek = datepart(dw,@a) + @@datefirst - 1
if @dayofweek > 7 select @dayofweek = @dayofweek - 7
select @b1=@b/5
select @b2=@b%5
select @b3=@b2 + @dayofweek
if ( @b3 >5 )
begin
select @b2= @b2 +2
end
return (dateadd(dd,(@b1*7+@b2),@a))
end
这次和时间设置无关了
Top
10 楼strongsun()回复于 2002-11-08 16:30:48 得分 0
向老衲学习!!!
select dbo.add_date(getdate(),5)Top
11 楼sky_blue(蓝天2007)回复于 2002-11-08 17:56:57 得分 0
select dbo.add_date(getdate()+1,25)
没问题,呵呵Top
12 楼senzz(森)回复于 2002-11-08 18:28:51 得分 0
有意思,学习!!Top
13 楼j9988(j9988)回复于 2002-11-08 18:53:03 得分 0
就是说随便给一天日期,得到五天工作日:
declare @dt datetime
set @dt=getdate()
select @dt 当天日期
select top 10 identity(int,1,1) as id into #temp from sysobjects
select top 5 @dt+id as 工作日 from #temp where datepart(dw,@dt+id) between 2 and 6
drop table #temp
当天日期
------------------------------------------------------
2002-11-08 18:50:43.513
(所影响的行数为 1 行)
工作日
------------------------------------------------------
2002-11-11 18:50:43.513
2002-11-12 18:50:43.513
2002-11-13 18:50:43.513
2002-11-14 18:50:43.513
2002-11-15 18:50:43.513
(所影响的行数为 5 行)
Top
14 楼j9988(j9988)回复于 2002-11-08 20:52:27 得分 20
declare @dt datetime
set @dt=getdate()
select top 7 identity(int,1,1) as id into #temp from sysobjects
--得到给定日期起后5天:
select @dt+id as 工作日 from #temp where datepart(dw,@dt+id) between 2 and 6
--得到给定日期所在星期的5天工作日:
select @dt-datepart(dw,@dt)+id as 工作日 from #temp where datepart(dw,@dt-datepart(dw,@dt)+id) between 2 and 6
drop table #tempTop
15 楼lizongqi(英雄啊)回复于 2003-04-28 16:08:13 得分 0
收
Top




