获取2个月前的日期

时间:2011-11-21 22:27:15

标签: sql ms-access ms-access-2010

我有一个问题,我一直在打扰我。无论一周中的哪一天,我都需要一个星期一的日期。例如,如果今天是星期二,我需要前一天的星期一。我正在使用MS访问权限来执行此操作。

4 个答案:

答案 0 :(得分:2)

我认为您可以使用提到的Weekday()函数@ mwolfe02,并将其与DateAdd()函数结合使用。在这些示例语句中,我还使用了一个IIf()函数来告诉DateAdd从开始日期中减去多少天。

? DateAdd("d", IIf(Weekday(#2011/11/20#, 2) = 1, _
-14, -6 - Weekday(#2011/11/20#, 2)), #2011/11/20#)
11/7/2011 

? DateAdd("d", IIf(Weekday(#2011/11/21#, 2) = 1, _
-14, -6 - Weekday(#2011/11/21#, 2)), #2011/11/21#)
11/7/2011 

? DateAdd("d", IIf(Weekday(#2011/11/22#, 2) = 1, _
-14, -6 - Weekday(#2011/11/22#, 2)), #2011/11/22#)
11/14/2011 

请参阅访问这些功能的在线帮助主题。

您没有说明是要从VBA代码还是在查询中执行此操作。而且你没有告诉我们日期值的来源。所以我不能给出更具体的内容。

修改:要使用当前日期在查询中执行此操作,请尝试以下方式:

SELECT
    DateAdd("d", IIf(Weekday(Date(), 2) = 1, -14, -6 - Weekday(Date(), 2)), Date())
    AS TwoMondaysAgo;

如果从Access应用程序会话中运行查询,则可以通过构建VBA用户定义函数来执行DateAdd计算,然后在查询中调用udf来创建不那么讨厌的查询。 / p>

答案 1 :(得分:0)

使用Weekday()功能。其余的只是数学。

答案 2 :(得分:0)

以下仅使用时间功能,这使其更具可移植性,并且可能意味着它的性能也更好:

SELECT DATEADD('D', ((
          DATEDIFF('D', #1990-01-09 00:00:00#, your_datetime_col) \ 7) * 7) - 7, 
          #1990-01-08 00:00:00#) 
  FROM YourTable;

这是VBA'证明'以匹配HansUp(除了我使用国际日期格式;)

? FORMAT$(DATEADD("D", _
      ((DATEDIFF("D", #1990-01-09 00:00:00#, #2011-11-20 00:00:00#) \ 7) * 7) - 7, _
      #1990-01-08 00:00:00#), "yyyy-mm-dd")
2011-11-07

? FORMAT$(DATEADD("D", _
      ((DATEDIFF("D", #1990-01-09 00:00:00#, #2011-11-21 00:00:00#) \ 7) * 7) - 7, _
      #1990-01-08 00:00:00#), "yyyy-mm-dd")
2011-11-07

? FORMAT$(DATEADD("D", _
      ((DATEDIFF("D", #1990-01-09 00:00:00#, #2011-11-22 00:00:00#) \ 7) * 7) - 7, _
      #1990-01-08 00:00:00#), "yyyy-mm-dd")
2011-11-14

答案 3 :(得分:-1)

我并不过分熟悉Access语法,但有些内容与

相似
DATEADD("d", -((datepart("w",now)-2)+14), now)

2表示星期一是一周的第二天。