我有一个问题,我一直在打扰我。无论一周中的哪一天,我都需要一个星期一的日期。例如,如果今天是星期二,我需要前一天的星期一。我正在使用MS访问权限来执行此操作。
答案 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表示星期一是一周的第二天。