选择所有跨越2年的生日(2012-2013)

时间:2012-12-15 01:51:31

标签: php mysql comparison date-comparison

只是好奇是否有人可以就这个用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)

我知道这样的事情已被问到,但我还没有找到任何“体面的......”如果可能的话,你可以帮助我,我将不胜感激。

简而言之,我认为我只需要一种更好的方式来查询'我的约会......提前谢谢!

2 个答案:

答案 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