2011-11-21 145 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 
相關問題