2012-08-17 101 views
1

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

+0

表中的日期列的数据类型是什么?日期或字符串? – 2012-08-17 14:40:40

+0

其表 – user1110597 2012-08-17 14:45:21

+0

类型DATE那么你可以使用BETWEEN指定两个日期 – 2012-08-17 14:46:20

回答

4

由于这是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

测试了SQLFiddle.com

SQLFiddle Demo

更新2

对不起,我的第一个答案。我真的很想念这条线coming in next 7 days from today。我认为这就是我被Imre L降低评分的原因。他有他的观点。之所以我发布这样的答案是因为我认为OP在询问中间的日子,不管year。所以这里是更新。

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

希望现在清楚。 :d

+0

聪明。这比我的想法在我的数据集(只是一个有很多记录和日期的随机表)上执行时间要快十分之一秒。我喜欢。 – MetalFrog 2012-08-17 14:53:16

+0

如果当前日期是2012-08-30,并且+7是2012-09-06,那么如果当前日期是2012-12-30,该怎么办? – 2012-08-17 14:58:22

+0

@MetalFrog测试它,它工作[* SQLFiddle演示链接*](http://sqlfiddle.com/#!2/c69d8/2) – 2012-08-17 15:01:31

0

如果您的出生日期是日期字段,只需按月份和日期范围选择它。

SELECT * 
FROM users 
WHERE MONTH(dob) = 8 
    AND DAY(dob) BETWEEN 17 AND 24; 
1

这将正确处理案件文有日期范围之间的一个月或一年的变化:

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)) 
1

由DOB日期转换为今年的日期你能避免问题在一段跨越一个月或年份边界。在生日在未来一周会发生此选择的所有行:

SELECT * FROM users 
WHERE concat(year(now()), mid(dob,5,6)) 
BETWEEN now() AND date_add(now(), interval 7 day) 
0
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; 

试试这个。为我工作。

0

允许列出12月14日至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')))