英国上一个工作日的日期变量?

时间:2013-02-27 18:16:24

标签: sql sql-server

致力于英国项目。

我把一个可爱的变量放在一个星期一到星期五的最后一个工作日的开始日期和结束日期。不幸的是,我希望开始日期时间是一天的开始,结束日期是一天的结束。我可以做些什么来改变这种情况?

SET @Startdate =
  ( CASE
    WHEN DATEPART(WEEKDAY, @Startdate) = 7
      THEN DATEADD(DAY, -2, @Startdate)
    WHEN DATEPART(WEEKDAY, @Startdate) = 1
      THEN DATEADD(DAY, (-2 - DATEPART(WEEKDAY, @Startdate)), @Startdate)
    ELSE
      DATEADD(DAY, -1, @Startdate)
  END )

SET @Enddate = 
  CASE
    WHEN DATEPART(WEEKDAY, @Enddate) = 7
      THEN DATEADD(DAY, -2, @Enddate)
    WHEN DATEPART(WEEKDAY, @Enddate) = 1
      THEN DATEADD(DAY, (-2 - DATEPART(WEEKDAY, @Enddate)), @Enddate)
    ELSE
      DATEADD(DAY, -1, @Enddate) 
  END

print @Startdate 
print @Enddate

结果:

  

2013年2月26日12:00 AM
  2013年2月26日12:00 AM

我需要Feb 26 2013 00:00直到Feb 27 2013 00:00,因此它涵盖了星期二的整天(如果今天运行的最后一个工作日)。

2 个答案:

答案 0 :(得分:1)

实际上午12:00是00:00,如果需要(http://msdn.microsoft.com/en-us/library/ms187928.aspx),您只需要将其转换为其他格式。

只需将一天添加到2月26日中午12:00,您将在2月27日凌晨00:00 00截至2月27日00:00。

答案 1 :(得分:1)

如果您执行粗略的Google搜索(许多优秀的UDF),这是一个已解决的问题,但要按原样使用您的代码,只需在@Enddate计算中添加一个,如果您确实希望第26个0:00到27日0:00(或者像肯尼斯费舍尔那样加入1以下,如果你想要23:59,那似乎更好)。