跳到主要内容

MONTHS_BETWEEN

描述

MONTHS_BETWEEN 函数计算两个日期之间的月份数(浮点数)。它接收两个日期参数和一个可选的布尔参数。

提示

该函数自 3.0.6 版本开始支持.

注意:<enddate><startdate> 都是各自月份的最后一天时,函数会进行特殊处理。它会返回完整的月份差值,而不考虑基于天数的分数部分。这确保了在比较一个月末与另一个月末时的一致性。

例如:

  • months_between('2024-01-31', '2024-02-29') 将返回 -1.0,因为两个日期都是各自月份的最后一天(1月31日和2月29日),所以结果被视为完整的月份差值,不进行分数调整。
  • months_between('2024-01-29', '2024-02-29') 也将返回 -1.0,因为月份中的日期相同。
  • months_between('2024-01-30', '2024-02-29') 将返回 -0.96774194,因为月份中的日期不同且不是月末。

语法

MONTHS_BETWEEN(<enddate>, <startdate> [, <round_type>])

参数

参数说明
<enddate>结束日期,表示差值计算中的较晚日期。支持 DATE(如 YYYY-MM-DD)或 DATETIME(如 YYYY-MM-DD HH:MM:SS)类型。
<startdate>开始日期,表示差值计算中的较早日期。支持 DATE(如 YYYY-MM-DD)或 DATETIME(如 YYYY-MM-DD HH:MM:SS)类型。
<round_type>是否将结果四舍五入到第八位小数。支持 truefalse。默认为 true

返回值

返回 <enddate> 减去 <startdate> 得到的月份数(浮点数)

结果 = (<enddate>.year - <startdate>.year) * 12 + <enddate>.month - <startdate>.month + (<enddate>.day - <startdate>.day) / 31.0

  • <enddate><startdate> 为 NULL,或两者都为 NULL 时,返回 NULL
  • <round_type>true 时,结果四舍五入到第八位小数。

示例

select months_between('2020-12-26','2020-10-25'),months_between('2020-10-25 10:00:00','2020-12-26 11:00:00',false);
+-------------------------------------------+-------------------------------------------------------------------+
| months_between('2020-12-26','2020-10-25') | months_between('2020-10-25 10:00:00','2020-12-26 11:00:00',false) |
+-------------------------------------------+-------------------------------------------------------------------+
| 2.03225806 | -2.032258064516129 |
+-------------------------------------------+-------------------------------------------------------------------+