DBeaver中计算两个string类型日期列的月份差问题问询
字符串格式日期列的月份差计算方案
以下方案默认你的字符串日期为YYYY-MM-DD标准格式,非标准格式仅需调整日期转换的格式参数即可。
1. SQL场景(主流数据库通用实现)
核心逻辑:先将字符串列转换为日期类型,再调用对应月份差函数计算
- MySQL 写法:
SELECT PERIOD_DIFF(DATE_FORMAT(col2, '%Y%m'), DATE_FORMAT(col1, '%Y%m')) AS month_diff FROM 你的表名;
PERIOD_DIFF直接返回整数月份差,示例中202103减202101可直接得到2,符合需求
- PostgreSQL/Oracle 写法:
SELECT EXTRACT(YEAR FROM AGE(TO_DATE(col2, 'YYYY-MM-DD'), TO_DATE(col1, 'YYYY-MM-DD')))*12 + EXTRACT(MONTH FROM AGE(TO_DATE(col2, 'YYYY-MM-DD'), TO_DATE(col1, 'YYYY-MM-DD'))) AS month_diff FROM 你的表名; - Hive/Spark SQL 写法:
SELECT MONTHS_BETWEEN(TO_DATE(col2), TO_DATE(col1)) AS month_diff FROM 你的表名;
需要整数结果的话,外层套
CAST()或者FLOOR()函数即可
2. Python Pandas场景
核心逻辑:转换列格式为日期类型后,通过年月属性计算差值
代码示例:
import pandas as pd # 转换两列为日期格式 df['col1'] = pd.to_datetime(df['col1']) df['col2'] = pd.to_datetime(df['col2']) # 计算自然月差值 df['month_diff'] = (df['col2'].dt.year - df['col1'].dt.year)*12 + (df['col2'].dt.month - df['col1'].dt.month)
3. Excel场景
核心逻辑:直接用DATEDIF函数识别标准字符串日期计算
单元格公式:=DATEDIF(A2, B2, "m")
A2为col1对应单元格,B2为col2对应单元格,参数
"m"表示返回月份差,无需额外转换字符串格式
注意事项
如果需要考虑当月日期的影响(比如2021-01-31到2021-02-01算1个月还是0个月),可以调整对应函数的参数或者增加判断逻辑即可。
内容的提问来源于stack exchange,提问作者CalinG
相关产品推荐
相关产品推荐

