MS ACCESS で経過月数を求める

SELECT IIF(DAY([終了日]) >= DAY([開始日] - 1),
    DATEDIFF("m", [開始日] - 1, [終了日]),
    DATEDIFF("m", [開始日] - 1, [終了日]) - 1
) AS 月数;

開始日が2011年1月31日で、終了日が2011年2月1日の場合

SELECT IIF(DAY(#2011/02/01#) >= DAY(#2011/01/31# - 1),
    DATEDIFF("m", #2011/01/31# - 1, #2011/02/01#),
    DATEDIFF("m", #2011/01/31# - 1, #2011/02/01#) - 1
) AS 月数;

「0」が返る。

開始日が2011年1月31日で、終了日が2011年2月27日の場合

SELECT IIF(DAY(#2011/02/27#) >= DAY(#2011/01/31# - 1),
    DATEDIFF("m", #2011/01/31# - 1, #2011/02/27#),
    DATEDIFF("m", #2011/01/31# - 1, #2011/02/27#) - 1
) AS 月数;

「0」が返る。

開始日が2011年1月31日で、終了日が2011年2月28日の場合

SELECT IIF(DAY(#2011/02/28#) >= DAY(#2011/01/31# - 1),
    DATEDIFF("m", #2011/01/31# - 1, #2011/02/28#),
    DATEDIFF("m", #2011/01/31# - 1, #2011/02/28#) - 1
) AS 月数;

「0」が返る。

開始日が2011年1月31日で、終了日が2011年3月1日の場合

SELECT IIF(DAY(#2011/03/01#) >= DAY(#2011/01/31# - 1),
    DATEDIFF("m", #2011/01/31# - 1, #2011/03/01#),
    DATEDIFF("m", #2011/01/31# - 1, #2011/03/01#) - 1
) AS 月数;

「1」が返る。

開始日が2011年1月31日で、終了日が2011年3月30日の場合

SELECT IIF(DAY(#2011/03/30#) >= DAY(#2011/01/31# - 1),
    DATEDIFF("m", #2011/01/31# - 1, #2011/03/30#),
    DATEDIFF("m", #2011/01/31# - 1, #2011/03/30#) - 1
) AS 月数;

「2」が返る。