在SQL Server中如何将两个日期之间的工作日作为查询条件

       可能看标题你还是不太懂我在讲什么,我们设定一个场景,假如一天老板叫你为他统计在06年圣诞节(2006-12-25) 至07年情人节(2007-02-14)这段时间创建的,处理了超过七天半(7.5个工作日)的客诉的数量,你如何操作呢?
        首先我们说超过7.5个工作日,就是要减去周六和周日后的天数,再者,超过了7.5天,也就是说处理时间有可能是8.4,10.2,13.1等等,诸如此类了。
        以下就是我的处理方法:
        假设数据库里有记录客诉的创建时间(BeginDate)和结束时间(EndDate),我们在查询语句中就可以这样写:
       Sql = "SELECT ... FROM ... WHERE BeginDate between '2006-12-25' and '2007-02-14' "
              +" and DATEDIFF(hh, BeginDate, EndDate) - "
              +"(DATEDIFF(day,DATEADD(wk, DATEDIFF(wk,0,BeginDate), 0),getdate())/7"
              +" - DATEDIFF(day,DATEADD(wk, DATEDIFF(wk,0,EndDate), 0),getdate())/7)*2*24 〉7.5*24";


        我来分析一下这个查询语句:
        BeginDate between '2006-12-25' and '2007-02-14'  应该很好理解,提取出规定日期的数据行。
        DATEDIFF(hh, BeginDate, EndDate) 计算两个日期之间总的小时数,为了方便说明,我们这里取个别名叫“A”。注意,这里要换算成为小时,原因你也可以先思考下。^^
        DATEDIFF(day,DATEADD(wk, DATEDIFF(wk,0,BeginDate), 0),getdate())/7的意思是让当前时间去减去创建时间所在星期的星期一的天数,然后再整除7,等到间隔的星期数。我们这里也取个别名叫“B”。
        同理可得,DATEDIFF(day,DATEADD(wk, DATEDIFF(wk,0,EndDate), 0),getdate())/7的意思是让当前时间去减去结束时间所在星期的星期一的天数,然后再整除7,等到间隔的星期数。我们这里也取个别名叫“C”。
        好了,该查询语句的原型就是:
        A - (B-C)*2*24 〉7.5*24
        (B-C)*2*24::B-C就是两个时间之间的星期数了,*2*24就是将这些星期换算为小时数,这样才能和A进行计算的。7.5*24原理也是一样。

        结束语:
        该语句的适用环境是开始时间和结束时间都必须在工作日发生的情况下,毕竟一些事情必须是在工作时才能处理的,而且不能处理特定节假日,例如五一、国庆放假等等,单靠一句SQL的确很难完成所有工作,不过可以将条件进行分类,形成多条SQL,然后用Union将其串起来,这只是我的初步想法,如果你有更优秀的办法,望能交流。^^         

        


       

转载于:https://www.cnblogs.com/Louistin/archive/2007/03/16/677501.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值