MySQL查询不含周末的五天前的日期

日期: 2008-07-01 作者:Rudy Limeback 来源:TechTarget中国 英文

我需要查询从现在算起五天前的日期。按照商业习惯,这五天应该不包含星期六和星期天。   专家回答:   对于许多跟商业日期有关的情况,最好的解决方案是使用日历表格。例如,使用办公时间(2001年5月22日)查询两个日期之间的时间差。

  我们知道在这个例子中,假日不会计算在内。很难明白为什么假日不被计算在内,但是周末却会被计算在内。但是既然假日不被计算在内,我们就可以应用一个公式。要开发这个公式,让我们首先探讨一下所有的可能性。

  如果今天是星期一,那么,往回数,我们跳过星期天和星期六,星期五是一天前,星期四是两天前,如此类推,那么“五天前”就是上个星期一。这里的“五天前”就意味着把周末排除出……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

我需要查询从现在算起五天前的日期。按照商业习惯,这五天应该不包含星期六和星期天。

  专家回答:

  对于许多跟商业日期有关的情况,最好的解决方案是使用日历表格。例如,使用办公时间(2001年5月22日)查询两个日期之间的时间差。

  我们知道在这个例子中,假日不会计算在内。很难明白为什么假日不被计算在内,但是周末却会被计算在内。但是既然假日不被计算在内,我们就可以应用一个公式。要开发这个公式,让我们首先探讨一下所有的可能性。

  如果今天是星期一,那么,往回数,我们跳过星期天和星期六,星期五是一天前,星期四是两天前,如此类推,那么“五天前”就是上个星期一。这里的“五天前”就意味着把周末排除出去,得出我们想要的日期,并不是真正字面意义上的五天前。我们可以从备忘录上看到差别。

  如果今天是星期二,那么,往回数,星期一是一天前,跳过星期天和星期六,星期五是两天前,星期四是三天前,如此类推,那么“五天前”就是上个星期二。

  这个模式——“五天前”就是上一个星期的同一天(星期X)——可重复到星期三、星期四和星期五。

  到了星期六,这个模式就不可用了。在星期六,五天前是星期一。在星期天,因为我们不计算星期六,五天前也是星期一。

  把我们的讨论发现总结成如下数据:

  数据表
           
    要获得“五天前”的日期,从今天减去的总天数(包括周末)显示在右边列中。


  我们给一个星期里的每一天排上序号,星期天(Sunday)=1,星期一(Monday)=2,如此类推,到星期六(Saturday)=7。把这些日子的序号排列在需要减去的天数前,我们会得到如下数据:

if today is  weekday   subtract
 Monday  2  7
 Tuesday  3  7
 Wednesday  4  7
 Thursday  5  7
 Friday  6  7
 Saturday  7  5
 Sunday  1  6

  公式如下:

  subtract = 7 - 2*(weekday/7) + (weekday-2)/7

  记住,这是要获得“五天前”的日期而需要从今天减去的天数。在这个公式里,除法是整数除法(即下舍入)。请不要问我这个公式是怎么发现的,反正是试差法的成果。

  我们要怎么把这个公式应用到SQL里呢?下面是一个运用MySQL句法的例子:


select distinct 
       cust.fname
     , cust.lname
     , cust.phone
  from orders as o
inner
  join customers as cust
    on cust.id = orders.cust_id
 where o.date_ordered =
       date_sub( current_date
               , interval
       7 - 2 * floor(dayofweek(current_date)/7)
         + floor((dayofweek(current_date)-2)/7)
                     day )
   and o.date_shipped is null 

  这个查询可以获得“五天前”下订单而货还没有运到的客户的联系方式。

相关推荐