2011-11-21 99 views
0

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

回答

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来查看令人讨厌的查询。

+0

对不起,日期值将来自当前日期,它将用于查询 – Luke101

+0

哦,男人..它的工作。谢谢你的工作。我在访问时总是不喜欢,不知道从哪里开始。 – Luke101

-1

我不是Access语法过于familar但一些alongs的

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

的2是指行至周一是一周的第二天。

0

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

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 
相关问题