我需要从表中找出人们的生日......从今天起接下来的 7 天。我有一个查询..SELECT * FROM
表WHERE
dobLIKE BETWEEN %-08-17 AND %-08-24
但它返回日期未在数据库中提交的记录.. 我的意思是条目是 0000-00-00 我已将生日以日期格式存储在表中。请帮助我找到错误。
问问题
6670 次
5 回答
6
由于这是 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 演示
更新 2
我很抱歉我的第一个答案。老实说,我错过了阅读这一行coming in next 7 days from today
。我认为这就是我被Imre L
. 他有他的观点。我发布这样的答案的原因是因为我认为无论year
. 所以这里是更新。
SELECT ....
FROM ....
WHERE DATE(dob) BETWEEN NOW() AND NOW() + INTERVAL 7 DAY
希望现在很清楚。:D
于 2012-08-17T14:47:09.037 回答
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))
于 2012-08-17T15:52:27.163 回答
1
通过将出生日期转换为今年的日期,您可以避免期间跨越月或年边界的问题。这将选择出生日期在下一周出现的所有行:
SELECT * FROM users
WHERE concat( year(now()), mid(dob,5,6) )
BETWEEN now() AND date_add(now(), interval 7 day)
于 2014-07-25T07:11:23.090 回答
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;
尝试这个。为我工作。
于 2017-10-20T15:22:56.603 回答
0
让我们列出在 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')))
于 2018-01-18T04:08:37.667 回答