小编典典

列出未来14天内所有生日的SQL

sql

我有一个MySQLmember表,该表的DOB字段以DATE格式存储所有成员的生日(注意:它具有“年份”部分)

我试图找到正确的SQL来:

  • 列出未来14天内的所有生日

和另一个查询到:

  • 列出过去14天内的所有生日

通过以下方式直接比较当前日期:

(DATEDIFF(DOB, now()) <= 14 and DATEDIFF(DOB, now()) >= 0)

由于当前年份和DOB年份不同,因此不会获取任何内容。

但是,将DOB转换为“今年”根本不起作用,因为今天可能是1月1日,而候选人的DOB可能是12月31日(反之亦然)

如果您能伸出援助之手,那就太好了,非常感谢!:)


阅读 161

收藏
2021-04-07

共1个答案

小编典典

我首先想到的是,仅使用DAYOFYEAR并取得差价就容易了,但实际上在开始/结束时有点技巧。然而:

WHERE 
DAYOFYEAR(NOW()) - DAYOFYEAR(dob) BETWEEN 0 AND 14 
OR DAYOFYEAR(dob) - DAYOFYEAR(NOW())  > 351

应该起作用,具体取决于您对leap年的关心程度。一个“更好”的答案可能是从dob中提取DAY()和MONTH()并使用MAKEDATE()建立当前(或潜在的过去/之后)年份的日期并与之进行比较。

2021-04-07