我正在尝试从客户生日在现在到一周之间的数据库中获取记录。我已经尝试了很多选择,但我正在寻找一个多小时,但找不到有效的解决方案。 我正在使用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
在荷兰:( 如果生日是现在到一周之间,我还需要从客户那里获得新年龄
希望有人能给我一个很好的工作答案
预先感谢
答案 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