【问题标题】:SELECT All Birthdays that span 2 years (2012-2013)选择跨越 2 年 (2012-2013) 的所有生日
【发布时间】:2012-12-15 01:51:30
【问题描述】:

只是好奇是否有人可以就这个使用 MySQL 查找生日的问题给我一些指导。

我目前有一个设置的“日历”,它显示 1 个月 + 前 3 天和该月后 3 天。

我遇到了一个当前出现的问题,因为过去 3 天的“年份”不一样,因为它将是 2013 年。所以我从 MySQL 中选择的代码是这样的

SELECT * FROM contacts WHERE userId = '23' AND Month(dob) IN('12', '01', '01')

现在我需要得到一个更好的日期比较,我认为。 我的代码是我有 2 个日期 (2012-12-01) - (2013-01-30)

我知道有人问过这样的问题,但我找不到任何“体面”的东西……如果可能的话,你能帮助我,将不胜感激。

简而言之,我认为我只是需要一种更好的方法来“查询”我的日期....提前致谢!

【问题讨论】:

  • 为什么投反对票?完全合法的问题。我投了赞成票。
  • 我没有对任何人投反对票......
  • 不是你,贾斯汀。那是一个陌生人。实际上有两个反对票。所以有时候很奇怪。

标签: php mysql comparison date-comparison


【解决方案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

【讨论】:

    【解决方案2】:

    您可以像这样查询范围内的日期:

     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)
    

    添加额外的一天,并使用&lt; 而不是&lt;=。那是因为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
    

    【讨论】:

    • 我认为他试图只在整个月内保持相同的帧,直到月份发生变化,也就是说,在整个 12 月期间,他只想查询 12 月的所有内容,以及最后三个十一月的几天和一月的前三天。这就是为什么我在下面的查询中找到这个月的“第一个日期”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多