2

如果生日在 MySQL 中存储为“日期”类型,您将如何确定它是否是 PHP 中特定用户今天的生日?

是否只是获取生日列值,在 上进行爆炸-,然后检查日期和月份是否与 PHP 中的当前日期和月份匹配?或者有没有更简单、不那么粗暴的方法呢?

另外,对于今天生日的SELECT 所有用户,您会使用什么查询?

4

7 回答 7

16

由于您需要排除年份,您可以使用MONTHDAYSQL 函数,如下所示:

SELECT * FROM table WHERE MONTH(birthday) = MONTH(NOW()) AND DAY(birthday) = DAY(NOW());

不要忘记在此列上添加索引,否则会随着数据的增长而严重降低性能。

在 PHP 中,您可以只使用date函数:

if (date('m-d', strtotime($row['date'])) == date('m-d'))
    //-- Today is my birthday! Hooray!
于 2012-06-04T22:22:52.040 回答
2

使用 MySQL 的日期函数从用户的出生日期中提取月份和日期,并将它们与从当前日期中提取的相同值进行比较:

SELECT * FROM table WHERE
    DAY(birthday) = DAY(CURDATE()) AND
    MONTH(birthday) = MONTH(CURDATE());

这样可以确保重要的值 - 月份和日期 - 匹配,无论年份如何。希望有帮助!

PS:您可能很想将其DAYOFYEAR用作更简单的版本。不。闰年会把你搞砸的。

编辑:看起来在你的 where 子句中使用日期函数真的会减慢你的速度,尤其是在大表中。请参阅下面我的最后一条评论,以了解更多信息。

于 2012-06-04T22:25:02.813 回答
1

您还可以在查询中添加一个值,1如果今天是他们的生日。这使它变得更容易,因此在您的 PHP 中您不必进行比较。

SELECT
    user_table.*,
    (MONTH(user_table.birth_date_column) = MONTH(now()) 
        AND DAY(user_table.birth_date_column) = DAY(now())) as birthday_today
FROM user_table

其他答案显示查询以获取今天生日的用户

于 2012-06-04T22:21:40.117 回答
1

查找生日与当前日期的月份和日期相同的人:

SELECT * from people 
WHERE month(birthDate) = month(curdate()) 
AND dayofmonth(birthDate) = dayofmonth(curdate())
于 2012-06-04T22:26:21.347 回答
0
select * from table
where month(BirthDate) = month(curdate())
and day(BirthDate) = day(curdate());
于 2012-06-04T22:25:55.933 回答
0
For Get User list whose birthday is today in mysql field datatype must be date 

$Toaday = '%'.date('m-d').'%';

$query = " select client_id,name,mobile_no from client where is_visible = 1 AND birth_date LIKE '$Toaday' ";
于 2016-08-02T10:55:48.673 回答
-1

查找员工今天的生日。我们可以用这个

SELECT * FROM crm_employee WHERE MONTH( dob ) = MONTH( CURDATE( ) ) 和 DAYOFMONTH( dob ) = DAYOFMONTH( CURDATE( ) )

于 2014-04-05T05:52:36.190 回答