months_between:计算月份差
速查结论
months_between(timestamp1, timestamp2[, roundOff]) 是 Spark SQL 中用于计算两个时间戳之间相差的月数的函数。
语法
months_between(timestamp1, timestamp2[, roundOff])
参数说明
| 参数 | 说明 |
|---|---|
| timestamp1 | 较晚的时间戳 |
| timestamp2 | 较早的时间戳 |
| roundOff | 可选布尔值,默认为 true。若为 true,结果四舍五入到 8 位小数;若为 false,不进行四舍五入 |
months_between(timestamp1, timestamp2[, roundOff]) - 如果 timestamp1 比 timestamp2 晚,那么结果为正数。如果 timestamp1 和 timestamp2 是同一月的同一天,或者都是月末的最后一天,将忽略一天中的小时数。否则,差异将基于每月 31 天来计算,并且除非 roundOff=false,否则将四舍五入到 8 位小数。
Examples:
> SELECT months_between('1997-02-28 10:30:00', '1996-10-30');
3.94959677
> SELECT months_between('1997-02-28 10:30:00', '1996-10-30', false);
3.9495967741935485
常见报错与避坑指南
- 参数顺序影响符号:若 timestamp1 早于 timestamp2,结果将为负数。确保按"较晚时间戳在前"的顺序传参。
- 月末日期特殊处理:当两个日期都是各自月份的月末时,函数会忽略具体天数差异,按整月计算。注意此行为可能导致非预期的结果。
- roundOff 精度:默认 roundOff=true 时结果只保留 8 位小数,若需要更高精度请传入
roundOff=false。
Since: 1.5.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
