Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查找一年中比今天晚发生的年度事件(生日日期)_Mysql_Date - Fatal编程技术网

Mysql 查找一年中比今天晚发生的年度事件(生日日期)

Mysql 查找一年中比今天晚发生的年度事件(生日日期),mysql,date,Mysql,Date,我的MySQL表: +---------------+----------------+ | name | birthdate | +---------------+----------------+ | John Doe | 1984-01-15 | | Susan Akroy | 1987-01-30 | +---------------+----------------+ 今天=2015-01-27 PHP: $curDate =

我的MySQL表:

+---------------+----------------+
| 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