Mysql 查找一年中比今天晚发生的年度事件(生日日期)
我的MySQL表:Mysql 查找一年中比今天晚发生的年度事件(生日日期),mysql,date,Mysql,Date,我的MySQL表: +---------------+----------------+ | name | birthdate | +---------------+----------------+ | John Doe | 1984-01-15 | | Susan Akroy | 1987-01-30 | +---------------+----------------+ 今天=2015-01-27 PHP: $curDate =
+---------------+----------------+
| name | birthdate |
+---------------+----------------+
| John Doe | 1984-01-15 |
| Susan Akroy | 1987-01-30 |
+---------------+----------------+
今天=2015-01-27
PHP:
$curDate = date("Y-m-d");
$sql = 'select id,name,birthdate from people where birthdate >= '{$curDate}', order by birthdate asc'
我正在尝试编写一个MySQL查询,查看某人的生日,如果该生日的月份和日期(不考虑年份)是今天还是将来,它将返回此人的详细信息
有人能给我指出正确的方向吗?假设您正在使用日期对象存储生日字段,您可以执行以下操作:
Select * from table_name where WHERE birthdate >= CURDATE()
或
您可以通过对数据进行排序来实现这一点。这相当棘手,因为您必须处理年终问题 以下是一个合理的方法:
select t.*
from table t
order by (format(birthdate, '%m-%d') >= format(now(), '%m-%d') desc,
format(birthdate, '%m-%d') asc
你可以添加限制来获得一个特定的数字。
< P>如果你认为不久的将来是10天:SELECT * FROM table WHERE DATEDIFF(CURDATE(),
DATE(YEAR(NOW())+'-'+MONTH(birthdate)+'-'+DAY(birthdate))
) BETWEEN 0 AND 10
这是一个非常有趣的问题。我们必须解决两个问题: 当两个日期不在同一年时,请考虑。 考虑闰年:通常3月1日在2月19日后10天,但闰年为11天。 下面的查询看起来有点吓人,但它是在实际数据上测试的。它选择所有生日介于今天和今天+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个人最接近今天的生日。我的选择会在不到n天的时间内选择所有过生日的人
什么更适合您的需要取决于您。显示您的实际查询。我们无法修复我们看不到的内容。添加您的查询详细信息假定birthdate类型为DATE,Gon的解决方案将起作用。。。但当然,它应该是:如果出生日期比今天大,那么这个人还没有出生……:让我重新表述一下我的问题…这返回1582-调用本机函数“MAKEDATE”时参数计数不正确修复了它,改用DATE函数。这个答案在经过一年时似乎没有考虑。@LorenzMeyer。现在是这样,第二个键是没有年份的月份和日期。
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