查找年度晚些时候发生的年度活动(生日日期)

时间:2015-01-27 20:04:10

标签: mysql date

我的MySQL表:

+---------------+----------------+
| name          | birthdate      |
+---------------+----------------+
| John Doe      | 1984-01-15     |
| Susan Akroy   | 1987-01-30     |
+---------------+----------------+

Today = 2015-01-27

PHP:

$curDate = date("Y-m-d");
$sql = 'select id,name,birthdate from people where birthdate >= '{$curDate}',  order by birthdate asc'

我试图编写一个查询某人生日的MySQL查询,如果该生日的月份和日期(无论年份)是今天还是将来,它将返回该人员#39 ; s细节。

有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:2)

您可以通过对数据进行排序来完成此操作。这很棘手,因为你必须处理年终问题。

这是一种合理的方式:

select t.*
from table t
order by (format(birthdate, '%m-%d') >= format(now(), '%m-%d') desc,
         format(birthdate, '%m-%d')  asc

然后,您可以添加limit以获取特定号码。

答案 1 :(得分:0)

假设您使用DATE对象存储您的出生日期字段,您可以执行以下操作:

Select * from table_name where WHERE birthdate >= CURDATE()

SELECT * 
FROM table_name 
WHERE 
MONTH(birthdate ) = desired_month AND 
DAY(birthdate ) = desired_day

答案 2 :(得分:0)

如果你认为不久的将来是10天:

SELECT * FROM table WHERE DATEDIFF(CURDATE(),
DATE(YEAR(NOW())+'-'+MONTH(birthdate)+'-'+DAY(birthdate))
) BETWEEN 0 AND 10

答案 3 :(得分:0)

这是一个非常有趣的问题。我们必须解决两个问题:

  1. 考虑两个日期不在同一年的情况。
  2. 考虑到闰年:通常在2月19日之后的第10天,也就是闰年的11天。
  3. 以下查询看起来有些可怕,但它可以工作(在真实数据上测试)。它选择所有在今天和今天之间有生日的人,+ 10天。

    select id, name, birthdate,
    date_format(concat(year(now()), date_format(birthdate, '-%m-%d')), '%j') - 
    date_format(now(), '%j') as diff
    from diged_requests
    having 
       diff <= 10 and diff >= 0 
       or diff + date_format(concat(year(now()), '-12-31'), '%j') <= 10 and diff < 0
    order by diff
    

    我有人在2月29日出生,他不会在非闰年被选中。

    戈登的回答更简单,它将给那些与他们今天最接近的生日。我会在不到n天的时间内选出所有生日的人。

    由您决定哪种更适合您的需求。