如何用MySQL计算任职年限(年和月)?求正确SQL查询语句
MySQL计算员工任职年限(年+月)的正确查询语句
直接通过日期的年、月、日分段计算,比用DATEDIFF转天数更准确——后者会忽略不同月份的天数差异,导致结果偏差。以下是适配你需求的SQL:
SELECT USERID, CONCAT( FLOOR(total_months / 12), ' Years and ', total_months % 12, ' Months' ) AS TENURE FROM ( SELECT USERID, -- 先计算年份差转成月份,加上月份的直接差值 (YEAR(Separation_Date) - YEAR(Date_Hired)) * 12 + (MONTH(Separation_Date) - MONTH(Date_Hired)) - -- 如果离职日的日期早于入职日,扣减1个月(当月未做满整月) CASE WHEN DAY(Separation_Date) < DAY(Date_Hired) THEN 1 ELSE 0 END AS total_months -- 替换成你的实际数据表名称 FROM your_table_name ) AS tenure_calculation;
逻辑说明
- 先通过年份差算出基础月份数,再叠加月份的直接差值
- 额外判断离职日的「日」是否小于入职日的「日」:若是,说明当月未做满整月,需扣减1个月
- 最后将总月份数拆分成年和月,拼接成你需要的格式
把语句中的your_table_name替换成你的实际表名,执行后就能得到期望的结果。
内容的提问来源于stack exchange,提问作者CodeGuide1000
相关产品推荐
相关产品推荐

