[英]Datediff in MsAccess
我被困在一個地方。 我在Access女士中使用DateDiff,它給了我適當的輸出,例如
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)
**但是如果要超過30天,我希望輸出為2個月。 如果是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**
在MsAccess的DateDiff中是否可能,或者是否有其他可用功能,以便我可以實現相同的輸出。**
您可以使用條件邏輯來做到這一點。 也許是這樣的:
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"
)
看來您對正數天的最小月份數是1,因此:
MonthCount = Sgn(DateDiff("d",StartDate,EndDate)) + DateDiff("m",StartDate,EndDate)
編輯
對於將產生示例輸出的30天切割,請在查詢中使用以下簡單公式:
MonthCount: (DateDiff("d",[StartDate],[EndDate])-1)\30+1
這個邏輯足以修改您的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))
該查詢似乎可以提供您想要的結果:
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
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.