使用MySQL确定今天是否是用户的生日

Jam*_*son 12 mysql timestamp unix-timestamp

我将所有用户的生日存储为UNIXtimestamp,并希望每天向当天有生日的用户发送电子邮件.

我需要创建一个MySQL查询,它将获取今天包含生日的所有行.

看起来这应该是相当简单的,但也许我只是过于复杂.

Sag*_*chi 20

这应该工作:

   SELECT * 
      FROM USERS
      WHERE 
         DATE_FORMAT(FROM_UNIXTIME(birthDate),'%m-%d') = DATE_FORMAT(NOW(),'%m-%d')
Run Code Online (Sandbox Code Playgroud)

  • 2月29日生日的孩子们已经习惯每4年一次庆祝他们的生日.他们获得了无生日垃圾邮件权限.公平交易,不是吗? (10认同)
  • 这并没有考虑到2月29日,那时没有闰年.用户必须在2月28日发送电子邮件.你必须把29日元(如果没有那天)纳入28日元. (5认同)

And*_*ore 8

这是一个属性考虑到闰年的答案,并将始终为您提供2月29日生日与3月1日同时的用户.

SELECT * 
  FROM USERS
  WHERE 
     DATE_FORMAT(FROM_UNIXTIME(birthDate),'%m-%d') = DATE_FORMAT(NOW(),'%m-%d')
     OR (
            (
                DATE_FORMAT(NOW(),'%Y') % 4 <> 0
                OR (
                        DATE_FORMAT(NOW(),'%Y') % 100 = 0
                        AND DATE_FORMAT(NOW(),'%Y') % 400 <> 0
                    )
            )
            AND DATE_FORMAT(NOW(),'%m-%d') = '03-01'
            AND DATE_FORMAT(FROM_UNIXTIME(birthDate),'%m-%d') = '02-29'
        )
Run Code Online (Sandbox Code Playgroud)


小智 5

如果出生日期存储在表中,您可以使用下面的查询。

今天生日:

select * from TABLENAME
 where DAY(FIELDNAME) = DAY(CURDATE())
   and MONTH(FIELDNAME) = MONTH(CURDATE());
Run Code Online (Sandbox Code Playgroud)

昨天生日:

select * from TABLENAME
 where DAY(FIELDNAME) = DAY(DATE_ADD(CURDATE(), INTERVAL -1 DAY))
   and MONTH(FIELDNAME) = MONTH(CURDATE());
Run Code Online (Sandbox Code Playgroud)

明天生日:

select * from TABLENAME
 where DAY(FIELDNAME) = DAY(DATE_ADD(CURDATE(), INTERVAL 1 DAY))
   and MONTH(FIELDNAME) = MONTH(CURDATE());
Run Code Online (Sandbox Code Playgroud)