我们使用以下语句来选择当周出生的出生日期:
SELECT * FROM tbl_user WHERE WEEK(dob,1) = WEEK(CURDATE(),1) ORDER BY id DESC
我们的' dob' column的类型为DATE,包含1条记录,其中dob为1972-07-09。但是,当我们运行查询时(今天是2014-07-07),我们得到一个空结果。
任何想法为什么? WEEK()仅适用于类型为DATETIME的列吗?
提前感谢您的帮助!
答案 0 :(得分:1)
SELECT WEEK('1972-07-09',1); //result= 27
SELECT WEEK('2014-07-07',1); //result=28
例如:
SELECT WEEK('2014-01-18',1); //result=3
你所处的条件不满足为什么它会返回false
和Empty Result
。
答案 1 :(得分:0)
2014-07-07是28周,1972-07-09是27周.27不等于28,所以没有结果。
您可以使用该查询进行检查:
select week('2014-07-07',1),week('1972-07-09',1) from tbl_user ;
答案 2 :(得分:0)
SELECT WEEK('1972-07-09',1);
结果:27
SELECT WEEK('2014-07-07',1);
结果:28
在这种情况下,您的条件WHERE WEEK(dob,1) = WEEK(CURDATE(),1)
为假。这就是为什么你得到一个空洞的结果。
答案 3 :(得分:0)
你对周的定义与MySQL不同。为了获得更好,更有效的结果,您应该决定要查找的最小和最大范围,并选择允许您定义一周开始和结束时间的范围。
SELECT *
FROM tbl_user
-- min range == 00:00:00 on the first day of week
WHERE dob >= ADDDATE(CURRENT_DATE, INTERVAL 1-DAYOFWEEK(CURRENT_DATE) DAY)
-- max range == 00:00:00 on the first day of next week
AND dob < ADDDATE(CURRENT_DATE, INTERVAL 8-DAYOFWEEK(CURRENT_DATE) DAY)
ORDER BY id DESC
可以根据需要调整开始日期和结束日期,但由于您没有将函数应用于dob
字段,因此您将避免进行表扫描。