使用date_add将列作为间隔值,并在mysql中比较日期

问题描述 投票:0回答:1

我有此员工表:

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)。我不明白这是怎么回事。

有人可以帮忙,或者推荐我正确的方法吗?预先感谢。

mysql dateadd
1个回答
0
投票

问题出在变量@ra上,它不能保证直接在列retirement_dateCAST(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

© www.soinside.com 2019 - 2024. All rights reserved.