MsAccess 中的 Datediff

问题描述 投票:0回答:5

我被困在一处。 我在 Ms 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中实现吗 或者是否有任何其他功能可用,以便我可以实现相同的输出。**

ms-access ms-access-2010 ms-access-2007 datediff
5个回答
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
投票

这个逻辑足以修改你的 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
投票

此查询似乎给出了您寻求的结果:

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
...

0
投票

看起来正数天数的最小月数是 1,因此:

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

编辑

对于将生成示例输出的 30 天削减,请在查询中使用以下简单公式:

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

0
投票

您可以使用 if 或 switch 语句检查输出是否 >0,然后显示“01”,否则显示“02”。

© www.soinside.com 2019 - 2024. All rights reserved.