如何将数据库TotalMonths列数值转换为年/月组合的时长格式?
解决方案:将TotalMonths转换为易读的时长格式
没问题,我来帮你搞定这个转换需求!针对你的Duration表,我们可以用SQL的算术运算和条件判断来生成符合要求的易读时长格式,直接上可执行的查询语句:
SELECT TotalMonths AS "Months", CONCAT( CASE WHEN FLOOR(TotalMonths / 12) > 1 THEN CONCAT(FLOOR(TotalMonths / 12), ' Years ') WHEN FLOOR(TotalMonths / 12) = 1 THEN CONCAT(FLOOR(TotalMonths / 12), ' Year ') ELSE '' END, CASE WHEN TotalMonths % 12 > 1 THEN CONCAT(TotalMonths % 12, ' Months') WHEN TotalMonths % 12 = 1 THEN CONCAT(TotalMonths % 12, ' Month') WHEN FLOOR(TotalMonths / 12) = 0 THEN CONCAT(TotalMonths, ' Months') ELSE '' END ) AS "Duration" FROM Duration;
逻辑拆解:
- 计算年和月:用
FLOOR(TotalMonths / 12)得到完整的年数,TotalMonths % 12得到剩余的月数 - 处理年数的单复数:年数大于1时显示
X Years,等于1时显示1 Year,没有年数则留空 - 处理月数的单复数与边界情况:
- 剩余月数大于1时显示
X Months,等于1时显示1 Month - 如果总月数不足12(没有年数),直接显示
X Months - 如果有完整年数且无剩余月数,月数部分留空
- 剩余月数大于1时显示
- 拼接结果:用
CONCAT把年数部分和月数部分组合成最终的时长字符串
执行这个查询后,你的数据会输出成你想要的格式:
Months Duration
24 2 Years
18 1 Year 6 Months
7 7 Months
内容的提问来源于stack exchange,提问作者Doonie Darkoo
相关产品推荐
相关产品推荐

