php mysql搜索生日在两个日期之间

kfgdxczn  于 2023-03-07  发布在  PHP
关注(0)|答案(6)|浏览(139)

我需要从表中找到人的出生日...未来7天从今天开始。我有一个查询..SELECT * FROMWHERE dob LIKE BETWEEN %-08-17 AND %-08-24,但它返回的日期没有提交到数据库中的记录...我的意思是条目是0000-00-00我已经在表中以日期格式存储了生日。请帮助我找到错误。

yhxst69z

yhxst69z1#

因为这是mysql,我不知道**DATE_FORMAT()**是否可以运行,但是给予看吧。

SELECT * FROM users WHERE DATE_FORMAT(dob, '%c-%d') 
BETWEEN DATE_FORMAT('1983-08-17', '%c-%d') 
AND DATE_FORMAT('1983-08-24', '%c-%d') OR (MONTH('1983-08-17') > MONTH('1983-08-24')
AND (MONTH(dob) >= MONTH('1983-08-17') 
OR MONTH(dob) <= MONTH('1983-08-24')))
  • 可以使用任何年份(仅用于完成日期格式),因为年份无关紧要 *
    更新1

在www.example.com上测试过SQLFiddle.com

*SQLFiddle演示 *

更新2

我对我的第一个答案感到抱歉。我真的错过了读这行coming in next 7 days from today。我想这就是为什么我被Imre L否决的原因。他有他的观点。我这样发布答案的原因是因为我认为OP是在问之间的日子,而不管year。所以这里是更新。

SELECT ....
FROM   ....
WHERE  DATE(dob) BETWEEN NOW() AND NOW() + INTERVAL 7 DAY

希望现在一切都清楚了

u5rb5r59

u5rb5r592#

这将正确处理日期范围之间存在月份或年份变化的情况:

select *
  from people
 where (DAYOFYEAR(dob)+IF(DAYOFYEAR(CURDATE())>DAYOFYEAR(dob),1000,0)) 
       between DAYOFYEAR(CURDATE()) 
           and (DAYOFYEAR(CURDATE() + INTERVAL 7 DAY)+IF(DAYOFYEAR(CURDATE())>DAYOFYEAR(CURDATE() + INTERVAL 7 DAY),1000,0))
b1payxdu

b1payxdu3#

通过将出生日期转换为今年的日期,您可以避免期间跨越月份或年份边界的问题。这将选择出生日期发生在下周的所有行:

SELECT * FROM users
WHERE concat( year(now()), mid(dob,5,6) ) 
BETWEEN now() AND date_add(now(), interval 7 day)
l7wslrjt

l7wslrjt4#

SELECT
str_to_date(DATE_ADD(dob, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(dob)) YEAR), '%Y-%m-%d') BIRTHDAY,A.*
FROM app_membership A
WHERE str_to_date(DATE_ADD(dob, INTERVAL (YEAR(CURRENT_DATE()) - YEAR(dob)) YEAR), '%Y-%m-%d') 
      BETWEEN str_to_date('15-10-2017','%d-%m-%Y') and str_to_date('10-11-2017','%d-%m-%Y')
ORDER BY BIRTHDAY ASC;

试试这个,对我管用.

xbp102n0

xbp102n05#

让我们列出在12月14日到8月24日之间的任何月份/年份出生的人。我们知道这是另一年之前的一年。我们必须计算前一年的月份。这很复杂,因为您可能会在比较开始日期的月份和结束日期的月份时遇到问题。但是,可以使用以下查询来解决这个问题:

SELECT * FROM t_users WHERE (DATE_FORMAT(d_birth, '%m-%d') 
BETWEEN DATE_FORMAT('2017-12-14', '%m-%d') AND 
DATE_FORMAT('2018-08-24', '%m-%d'))

OR(MONTH('2017-12-31') >= MONTH('2018-08-24')
AND (MONTH(d_birth) >= MONTH('2017-12-31') 
OR MONTH(d_birth) <= MONTH('2018-08-24')))
oxiaedzo

oxiaedzo6#

简单查询
从测试1中选择 *,其中日期格式(出生日期,' % m- % d')介于' 04 - 01 '和' 04 - 30';
https://youtu.be/CaJKmw9NLq0

相关问题