2016-09-18 5 views
0

Я застрял в одном месте. Я использую DATEDIFF в MS Access это дает мне надлежащий выход, какDatediff in 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

Это для доступа к M .. Вы можете использовать публичные функции vba в доступе SQL. @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 
... 

 Смежные вопросы

  • Нет связанных вопросов^_^