Oracle SQL如何计算两个日期间的年月并格式化输出
双日期间隔年数+月数格式输出SQL解法
现有查询问题说明
你当前使用的查询是将月份差直接除以12取小数,仅能得到带小数位的总年数,无法拆分出独立的年数和剩余月数,需要先提取整数间隔总月数再拆分计算。
Oracle数据库解法(适配MONTHS_BETWEEN函数场景)
- 先用
TRUNC(MONTHS_BETWEEN(lease_end_date, lease_start_date))获取两个日期之间的整数间隔总月数 - 总月数整除12得到完整年数,总月数对12取余得到剩余月数
- 拼接为要求的输出格式
完整查询语句:
SELECT CONCAT( FLOOR(TRUNC(MONTHS_BETWEEN(lease_end_date, lease_start_date)) / 12), 'year ', MOD(TRUNC(MONTHS_BETWEEN(lease_end_date, lease_start_date)), 12), 'months' ) AS Duration FROM lease_header;
MySQL数据库解法
MySQL可直接用TIMESTAMPDIFF函数获取整数间隔月数,计算逻辑一致:
SELECT CONCAT( FLOOR(TIMESTAMPDIFF(MONTH, lease_start_date, lease_end_date) / 12), 'year ', MOD(TIMESTAMPDIFF(MONTH, lease_start_date, lease_end_date), 12), 'months' ) AS Duration FROM lease_header;
补充说明
如果业务需要对不足1个月的时长做进位处理,将上述语句中的TRUNC替换为ROUND即可。
内容的提问来源于stack exchange,提问作者Abinnaya
相关产品推荐
相关产品推荐

