MONTHS_BETWEEN

返回两个日期之间的月份数。 MONTHS_BETWEEN 可返回整数或 FLOAT:

  • 整数:date1date2 的日期部分相同,且两个日期都不是本月的最后一天。 MONTHS_BETWEEN 如果 date1date2 中的两个日期都是各自月份的最后一个,也返回整数。例如,MONTHS_BETWEEN 将 4 月 30 日到 3 月 31 日之间的差异计算为 1 个月。

  • FLOAT:date1date2 的日期部分不同,且其中一个或两个日期并非各自月份的最后一天。例如,4 月 2 日和 3 月 1 日之间的差异为 1.03225806451613。为计算月份部分,MONTHS_BETWEEN 假设所有月份都包含 31 天。

MONTHS_BETWEEN 忽略时间戳时间部分。

行为类型

  • 如果两个日期实参均为数据类型 TIMESTAMPDATE,则是 不可变

  • 如果任一日期为 TIMESTAMPTZ,则是 稳定

语法

MONTHS_BETWEEN ( date1 , date2 );

参数

date1
date2
指定要求值的日期,其中 date1date2 的求值结果为以下数据类型之一:
  • DATE

  • TIMESTAMP

  • TIMESTAMPTZ

如果 date1 < date2,则 MONTHS_BETWEEN 返回负值。

示例

返回 2016 年 4 月 7 日到 2015 年 1 月 7 日之间的月份数:

=> SELECT MONTHS_BETWEEN ('04-07-16'::TIMESTAMP, '01-07-15'::TIMESTAMP);
 MONTHS_BETWEEN
----------------
             15
(1 row)

返回 2016 年 3 月 31 日到 2016 年 2 月 28 日之间的月份数(MONTHS_BETWEEN 假设两个月都包含 31 天):

=> SELECT MONTHS_BETWEEN ('03-31-16'::TIMESTAMP, '02-28-16'::TIMESTAMP);
  MONTHS_BETWEEN
------------------
 1.09677419354839
(1 row)

返回 2016 年 3 月 31 日到 2016 年 2 月 29 日之间的月份数:

=> SELECT MONTHS_BETWEEN ('03-31-16'::TIMESTAMP, '02-29-16'::TIMESTAMP);
 MONTHS_BETWEEN
----------------
              1
(1 row)