MS Access 2010(设计视图):返回当周的星期一,星期一为一周的第一天

时间:2015-04-27 15:01:14

标签: date ms-access design-view

我需要让我的Access查询始终返回当周的星期一。我在Google / StackOverflow上看到了一些解决方案但它们是用SQL编写的,我是创建Access查询的初学者(我使用Design视图来制作它们)。

目标:本周应被视为 M T W T F S S. 然后,查询应始终返回当前周的星期一。因此,如果是星期天,它仍然应该返回星期一之前,下周的星期一。任何人都可以使用Access 2010中的设计视图解释如何执行此操作吗?

2 个答案:

答案 0 :(得分:5)

请注意,在这种情况下,我们正在使用日期,因此如果我们Date(),我们将在今天前一天获得。

DatePart( "w" - Weekday Date() - Today's date 2 - vBMonday (Access assumes Sunday is the first day of the week, which is why this is necessary.) 1 - vbFirstJan1 - This gets into using the first week of the year. We could have omitted this, as 1 is the default. ) -1 - Subtract 1 from the DatePart value. 〜今天的日期

Date() = 4/27/2015 (at time of this writing)
DatePart("w",Date(),2,1) = 1
DatePart("w",Date(),2,1)-1 = 0

Date()-0

所以我们有Date() = 4/28/2015 DatePart("w",Date(),2,1) = 2 DatePart("w",Date(),2,1)-1 = 1 ......好吧,那是什么意思?好吧,让我们看一个更有用的场景,即今天的日期不是周一。

让我们今天的行为是2015年4月28日(星期二)

weekday

所以,从外面看,在;给我当前的工作日价值。 (1 =星期一,2 =星期二等),并从中减去1 - >我们需要从当前日期减去多少天才能返回到data值1(星期一)。

答案 1 :(得分:0)

这是一个能够做到这一点的功能:

Public Function DatePrevWeekday( _
  ByVal datDate As Date, _
  Optional ByVal bytWeekday As VbDayOfWeek = vbMonday) _
  As Date

' Returns the date of the previous weekday, as spelled in vbXxxxday, prior to datDate.
' 2000-09-06. Cactus Data ApS.

  ' No special error handling.
  On Error Resume Next

  DatePrevWeekday = DateAdd("d", 1 - Weekday(datDate, bytWeekday), datDate)

End Function

由于vbMonday为2且您的日期为今天,您可以在查询中使用核心表达式:

PreviousMonday: DateAdd("d",1-Weekday(Date(),2),Date())