我有此员工表:
Name birth_date retirement_age
Andy 1964-03-13 56
Bertha 1964-11-16 55
Chris 1964-03-08 58
Damon 1964-04-11 56
我正在尝试通过使用date_add()向他们的生日添加退休年龄,来找出哪个员工本月(2019年11月)退休。退休日期总是在月底。
这是我一直在努力的:
SELECT Name,
@ra:=CAST(retirement_age AS UNSIGNED),
LAST_DAY(DATE_ADD(`birth_date`, INTERVAL @ra year)) as `retirement_date`,
FROM `employees`
HAVING
`retirement_date`='2019-11-30'
问题是查询产生0个结果,而该查询应返回1个结果(Bertha)。我不明白这是怎么回事。
有人可以帮忙,或者推荐我正确的方法吗?预先感谢。
问题出在变量@ra
上,它不能保证直接在列retirement_date
或CAST(retirement_age AS UNSIGNED)
之前进行计算。因此,将其删除并使用retirement_age
:
SELECT Name,
LAST_DAY(DATE_ADD(`birth_date`, INTERVAL retirement_age year)) AS `retirement_date`
FROM `employees`
HAVING `retirement_date` = '2019-11-30'
请参见demo。