MONTHS_BETWEEN

更新时间:
复制 MD 格式

MONTHS_BETWEEN函数用于返回日期end_date和start_date之间的月数。

命令格式

DOUBLE MONTHS_BETWEEN(DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ|STRING <end_date>, DATE|DATETIME|TIMESTAMP|TIMESTAMP_NTZ|STRING <start_date>)

-- 标准示例。
-- 返回2.9495967741935485。
SELECT MONTHS_BETWEEN('2025-06-28 10:30:00', '2025-3-30');

参数说明

end_date、start_date:必填。日期或时间戳。支持DATE、DATETIME、TIMESTAMP、TIMESTAMP_NTZ或STRING类型。

STRING类型作为输入参数时,日期格式需包含yyyy-mm-dd。

返回值说明

返回DOUBLE类型。返回规则如下:

  • 当end_date晚于start_date时,返回值为正。当start_date晚于end_date时,返回值为负。

  • 当end_date和start_date分别对应两个月的最后一天,返回整数月;否则计算方式为end_date减去start_date的天数除以31天。

  • end_date或start_date值为NULL时,返回NULL。

使用示例

  • 示例1:非整月间隔。

    -- 结果以31天为基准折算成小数月。正负号由日期顺序决定。
    -- 返回3.9495967741935485。
    SELECT MONTHS_BETWEEN('2025-02-28 10:30:00', '2024-10-30');
    
    -- 返回-3.9495967741935485。
    SELECT MONTHS_BETWEEN('2024-10-30', '2025-02-28 10:30:00');
  • 示例2:月末对齐的整月差计算。

    -- 两日期均为各自月份最后一天,视为整月对齐。
    -- end_date 早于 start_date,结果为负。
    -- 返回-3.0。
    SELECT MONTHS_BETWEEN('2025-09-30', '2025-12-31');
  • 示例3:NULL 输入处理。

    -- 返回NULL。
    SELECT MONTHS_BETWEEN('2025-06-15', NULL);
    
    -- 返回NULL。
    SELECT MONTHS_BETWEEN(NULL, '2025-06-15');
  • 示例4:跨年月份计算。

    -- 返回12.0。
    SELECT MONTHS_BETWEEN('2026-01-31', '2025-01-31');

相关函数

MONTHS_BETWEEN函数属于日期函数,更多日期计算、日期转换的相关函数请参见日期函数。