2016-09-18 135 views
0

我被困在一個地方。 我在微軟的Access使用DateDiff的它給我正確的輸出,就像Datediff在MsAccess中

StartDate is 10-Sep-2016 
EndDate is 15-Oct-2016 

Total Days which I will get is 35 
& months will i get is 1 Month 

DateDiff('d',StartDate,EndDate) 

**不過,我想在2個月輸出如果exeeded 30天。 如果是61天然後3個月&等。

**IIFFF days diffrence is 
    29 Days then output should be 1 months 
    30 Days then output should be 1 months 
    32 Days then output should be 2 months 
    60 Days then output should be 2 months 
    62 Days then output should be 3 months** 

將是有可能的則DateDiff在MSACCESS 或有任何其他功能可用,這樣我可以達到相同的輸出。**

回答

0

爲此,您可以使用條件邏輯。也許像這樣:

select iif(DateDiff('d', StartDate, EndDate) > 30, 
      DateDiff('d',StartDate,EndDate) & " days", 
      "2 months" 
     ) 

你的邏輯,任何超過30天是「2個月」似乎很奇怪。通常情況下,我認爲邏輯是這樣的:

select iif(DateDiff('d', StartDate, EndDate) > 30, 
      DateDiff('d', StartDate, EndDate) & " days", 
      DateDiff('m', StartDate, EndDate) & " months" 
     ) 
+0

先生,其實我不想每次都是2個月,如果是61天,那麼我想要3個月如此 –

+0

@HardikParmar。 。 。因此答案的第二部分。您可能需要在月份編號中加1。 –

0

這似乎是一個正的天數你的月最低數爲1,即:

MonthCount = Sgn(DateDiff("d",StartDate,EndDate)) + DateDiff("m",StartDate,EndDate) 

編輯

對於爲期30天的剪輯將生成您的示例輸出,請在您的查詢中使用以下簡單公式:

MonthCount: (DateDiff("d",[StartDate],[EndDate])-1)\30+1 
0

這個邏輯足以修改你的SQL函數嗎?

Public Function FN_GET_MONTH(iDays As Long, Optional iDaysInMonth As Long = 30) 

    If (iDays/iDaysInMonth) > iDays \ iDaysInMonth Then 
     FN_GET_MONTH = (iDays \ iDaysInMonth) + 1 
    Else 
     FN_GET_MONTH = (iDays \ iDaysInMonth) 
    End If 

End Function 

?FN_GET_MONTH(29) = 1 
?FN_GET_MONTH(31) = 2 
?FN_GET_MONTH(60) = 2 
?FN_GET_MONTH(80) = 3 
?FN_GET_MONTH(91) = 4 

,你可以有這樣的公共職能,並用它在你的SQL代碼一樣

FN_GET_MONTH(DateDiff("d", StartDate, EndDate))

+0

你的答案對我來說是完美的搭配。您的理解與我的理解非常相似,但我使用的是MS ACCESS數據庫。 –

+0

這是爲Ms訪問..你可以在訪問SQL中使用vba公共函數。 @hardik parmar –

+0

查看我編輯的答案爲簡單的一行。 – Gustav

0

該查詢似乎給你所尋求的結果:

SELECT 
    StartDate, 
    EndDate 
    numDays, 
    ((numDays - 1) \ 30) + 1 AS numMonths 
FROM 
    (
     SELECT 
      StartDate, 
      EndDate, 
      DateDiff("d", StartDate, EndDate) AS numDays 
     FROM YourTable 
    ) 

它給我

numDays numMonths 
------- --------- 
... 
    29   1 
    30   1 
    31   2 
    32   2 
... 
    59   2 
    60   2 
    61   3 
    62   3 
...