从现在到一周之间,从客户那里获得生日

时间:2018-09-20 07:53:08

标签: mysql sql database

我正在尝试从客户生日在现在到一周之间的数据库中获取记录。我已经尝试了很多选择,但我正在寻找一个多小时,但找不到有效的解决方案。 我正在使用MYSQL 5.7.19。 这是我的查询

SELECT firstname, lastname, IF(housenumber_addition = "", CONCAT(housenumber,housenumber_addition ), housenumber_addition ) AS adres, sex
FROM customer
WHERE DATE(birthdate) BETWEEN NOW() AND NOW() + INTERVAL 7 DAY

数据图片: Data 结构图: Structure

在荷兰:( 如果生日是现在到一周之间,我还需要从客户那里获得新年龄

希望有人能给我一个很好的工作答案

预先感谢

1 个答案:

答案 0 :(得分:2)

您的问题是出生日期不在当前年份,因此您的测试不可能正确。您需要将出生日期转换为当年的值,您可以通过以下方式进行操作:

STR_TO_DATE(CONCAT(YEAR(NOW()), '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d')

因此您的查询变为:

SELECT firstname, lastname, IF(housenumber_addition = "", CONCAT(housenumber,housenumber_addition ), housenumber_addition ) AS adres, sex
FROM customer
WHERE STR_TO_DATE(CONCAT(YEAR(NOW()), '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d') BETWEEN NOW() AND NOW() + INTERVAL 7 DAY

更新

正如@GordonLinoff指出的那样,如果一周与一年结束重叠并且生日在1月初(例如NOW()='2018-12-28'并且生日='1985-01),则此方法不起作用-02')。要使该案例生效,还需要检查YEAR(NOW())+1中的生日,即

SELECT firstname, lastname, IF(housenumber_addition = "", CONCAT(housenumber,housenumber_addition ), housenumber_addition ) AS adres, sex
FROM customer
WHERE STR_TO_DATE(CONCAT(YEAR(NOW()), '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d') BETWEEN NOW() AND NOW() + INTERVAL 7 DAY OR
    STR_TO_DATE(CONCAT(YEAR(NOW())+1, '-', MONTH(birthdate), '-', DAY(birthdate)), '%Y-%m-%d') BETWEEN NOW() AND NOW() + INTERVAL 7 DAY