我需要使用mysql查询将总天数转换为年,月和日格式。
我目前的代码就是这个:
SELECT nombre, fecha_de_inicio, DATEDIFF(NOW(), fecha_de_inicio) as days_employed
FROM cms_trabajadores
GROUP BY days_employed desc
现在结果就像这样(3列):
名称开始日期和days_employed
Aaron,2007-06-25 00:00:00,2759
第一列是其名称,第二列是开始日期,第三列是最后一列。
我希望总工作时间如下:
7年,6个月和21天
提前感谢您的帮助。
我的桌子上有开始日期,而且我总是与当天比较。
答案 0 :(得分:0)
经过一些更正后,以下查询给出了您按预期标记的确切结果:
SELECT DISTINCT
nombre,
fecha_de_inicio,
FLOOR(PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(fecha_de_inicio, '%Y%m')) / 12) as years_employed,
PERIOD_DIFF(DATE_FORMAT(DATE_ADD((CASE WHEN DAY(NOW()) >= DAY(fecha_de_inicio) THEN NOW() ELSE DATE_ADD(NOW(), INTERVAL -1 MONTH) END), INTERVAL -(FLOOR(PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(fecha_de_inicio, '%Y%m')) / 12)) YEAR), '%Y%m'), DATE_FORMAT(fecha_de_inicio, '%Y%m')) as months_employed,
DATEDIFF(NOW(), fecha_de_inicio) - DATEDIFF(DATE_ADD(CONVERT(CONCAT(DATE_FORMAT((CASE WHEN DAY(NOW()) >= DAY(fecha_de_inicio) THEN NOW() ELSE DATE_ADD(NOW(), INTERVAL -1 MONTH) END), '%Y-%m-'), RIGHT('0' + DAY(fecha_de_inicio), 2)), DATE), INTERVAL -1 DAY), fecha_de_inicio) as days_employed
FROM
cms_trabajadores
ORDER BY
years_employed desc,
months_employed desc,
days_employed desc
years_employed :FLOOR(PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(fecha_de_inicio, '%Y%m')) / 12)
- 当前日期和就业日期之间的年数差异计算为月份差异除以12且剩余剩余时间
months_employed :PERIOD_DIFF(DATE_FORMAT(DATE_ADD((CASE WHEN DAY(NOW()) >= DAY(fecha_de_inicio) THEN NOW() ELSE DATE_ADD(NOW(), INTERVAL -1 MONTH) END), INTERVAL -(FLOOR(PERIOD_DIFF(DATE_FORMAT(NOW(), '%Y%m'), DATE_FORMAT(fecha_de_inicio, '%Y%m')) / 12)) YEAR), '%Y%m'), DATE_FORMAT(fecha_de_inicio, '%Y%m'))
- 在此处,使用PERIOD_DIFF
功能,仅在NOW()
的前1个月内计算差异如果 DAY(NOW()) < DAY(fecha_de_inicio)
,则减去年数差异,然后在减法产品和DATEDIFF
之间制作fecha_de_inicio
;这应该得到剩余月份
days_employed :DATEDIFF(NOW(), fecha_de_inicio) - DATEDIFF(DATE_ADD(CONVERT(CONCAT(DATE_FORMAT((CASE WHEN DAY(NOW()) >= DAY(fecha_de_inicio) THEN NOW() ELSE DATE_ADD(NOW(), INTERVAL -1 MONTH) END), '%Y-%m-'), RIGHT('0' + DAY(fecha_de_inicio), 2)), DATE), INTERVAL -1 DAY), fecha_de_inicio)
- 此值仅在NOW()
的前1个月减去,仅当 DAY(NOW()) < DAY(fecha_de_inicio)
时,然后使用DATE_FORMAT
建立新日期,从第一步(条件-1月步骤)准备的NOW()
中取出年份和月份,并从fecha_de_inicio
减去日,然后减去1天。如果天数实际上是NOW()
和fecha_de_inicio
之间的月份差异,但是转换为天数,我们会从这两个日期之间的DATEDIFF(NOW(), fecha_de_inicio)
严格差异中减去此值。这给了我们剩余的日子
我希望它可能会有所帮助。如有疑问,请写信。