只是好奇是否有人可以就这个用MySQL找到生日的问题给我一些指导。
我目前有一个'日历'这是设置,它显示在该月之前的1个月+ 3天和之后的3天。
我遇到了一个问题,这个问题目前正在出现,因为' year'在过去的3天里不一样,因为它将是2013年。所以我从MySQL中选择的代码就是这个
SELECT * FROM contacts WHERE userId = '23' AND Month(dob) IN('12', '01', '01')
现在我需要得到一个稍微好一点的日期比较。 我的代码是我有2个日期(2012-12-01) - (2013-01-30)
我知道这样的事情已被问到,但我还没有找到任何“体面的......”如果可能的话,你可以帮助我,我将不胜感激。
简而言之,我认为我只需要一种更好的方式来查询'我的约会......提前谢谢!
答案 0 :(得分:1)
您可以在以下范围内查询日期:
SELECT *
FROM contacts
WHERE dob >= :first_date - INTERVAL 3 DAY
AND dob < :first_date + INTERVAL 1 MONTH + INTERVAL 3 DAY + INTERVAL 1 DAY
中有一些猴子生意
dob < (something)
添加额外一天,并使用<
代替<=
。那是因为DATETIME
值不需要在他们的时间午夜。因此,我们希望在下一个日午夜之前包含所有内容。
除此之外,此查询将查找日期在指定范围内的所有行。
如果您正在使用当前日期,正如Algomorph所述,您可以将当前日期截断为当月的第一天。
CAST(DATE_FORMAT(CURRENT_DATE,'%Y-%c-01') AS DATE)
这会让你得到这样的查询。
SELECT *
FROM contacts
WHERE dob >= CAST(DATE_FORMAT(CURRENT_DATE,'%Y-%c-01') AS DATETIME)
- INTERVAL 3 DAY
AND dob < CAST(DATE_FORMAT(CURRENT_DATE,'%Y-%c-01') AS DATETIME)
+ INTERVAL 1 MONTH + INTERVAL 3 DAY + INTERVAL 1 DAY
答案 1 :(得分:1)
尝试类似:
SELECT *
FROM contacts
WHERE userId = '23'
AND dob BETWEEN
(CURRENT_DATE - INTERVAL (DAYOFMONTH(CURRENT_DATE)+3) DAY)
AND ((CURRENT_DATE + INTERVAL 1 MONTH) + INTERVAL 3 DAY);
免责声明:这来自我的头脑,所以请测试语法。 注意:这假设您的[dob]字段仅为DATE,而不是DATETIME。如果使用DATETIME / TIMESTAMP,cast to DATE or adjust the upper and lower bounds accordingly。