【问题标题】:Using date_add with a column as interval value and comparing dates in mysql使用 date_add 与列作为间隔值并比较 mysql 中的日期
【发布时间】:2019-11-28 16:35:51
【问题描述】:

我有这张员工表:

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)。 我不明白它有什么问题。

有人可以帮助或推荐我正确的方法吗? 提前致谢。

【问题讨论】:

  • 你为什么使用 Have 而不是 Where?

标签: mysql dateadd


【解决方案1】:

问题是变量@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-06
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多