我的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细节。
有人能指出我正确的方向吗?
答案 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)
这是一个非常有趣的问题。我们必须解决两个问题:
以下查询看起来有些可怕,但它可以工作(在真实数据上测试)。它选择所有在今天和今天之间有生日的人,+ 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天的时间内选出所有生日的人。
由您决定哪种更适合您的需求。