You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何计算两个字符型年月列的月份差值?

计算字符型年月列的月份差值

方法1:手动提取年月计算(无依赖,通用)

直接从字符串中拆分年份和月份,通过公式 (年差)*12 + 月差 计算差值:

ym1 = "202301"
ym2 = "202201"

# 拆分年份和月份
year1, month1 = int(ym1[:4]), int(ym1[4:])
year2, month2 = int(ym2[:4]), int(ym2[4:])

# 计算月份差
month_diff = (year1 - year2) * 12 + (month1 - month2)
print(month_diff)  # 输出:12

方法2:Python datetime + relativedelta(适合复杂日期场景)

如果需要处理更复杂的日期逻辑,可借助dateutil库的relativedelta直接计算月份差:

from datetime import datetime
from dateutil.relativedelta import relativedelta

ym1 = "202301"
ym2 = "202201"

# 转成datetime对象
date1 = datetime.strptime(ym1, "%Y%m")
date2 = datetime.strptime(ym2, "%Y%m")

# 计算月份差
diff = relativedelta(date1, date2)
month_diff = diff.years * 12 + diff.months
print(month_diff)  # 输出:12

方法3:SQL实现(以MySQL/PostgreSQL为例)

MySQL

使用STR_TO_DATE转日期类型,再用TIMESTAMPDIFF直接计算月份差:

SELECT TIMESTAMPDIFF(MONTH, STR_TO_DATE(ym2, '%Y%m'), STR_TO_DATE(ym1, '%Y%m')) AS month_diff
FROM your_table;

PostgreSQL

通过TO_DATE转日期,结合age函数提取年月差:

SELECT 
    (DATE_PART('year', age(TO_DATE(ym1, 'YYYYMM'), TO_DATE(ym2, 'YYYYMM'))) * 12 + 
     DATE_PART('month', age(TO_DATE(ym1, 'YYYYMM'), TO_DATE(ym2, 'YYYYMM'))))::int AS month_diff
FROM your_table;

内容的提问来源于stack exchange,提问作者Amandeep Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:52:55