CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

如何在某天上加5个工作日

楼主carmon(风风魔)2002-11-08 11:41:14 在 MS-SQL Server / 疑难问题 提问

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

相关问题

  • 当前日期加上n个工作日,怎么去掉节假日时间?????
  • 如何判断某一天是否工作日(周六周日及法定节假日除外)
  • 一个 SQA 的工作日记[转贴]
  • 如何计算工作日问题
  • 问一个计算工作日的问题?
  • Project2000中如何如何使星期六和星期日都成为工作日?
  • 如何计算出两个日期之间有多少个工作日?
  • 用asp.net做这个网站大约要多少工作日?报多少费用?
  • 怎样获取一个月的实际工作日(即不包括周六日)
  • 老大们:写工作日志要注意什么呀? 帮帮新人吧!

关键词

  • date
  • top
  • dayofweek
  • 工作日
  • datepart
  • dt
  • dw
  • dateadd
  • 日期
  • getdate

得分解答快速导航

  • 帖主:carmon
  • sky_blue
  • j9988

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo