使用mySQL WEEK()查找当前周的日期时出现空结果

时间:2014-07-07 11:32:26

标签: mysql date datetime

我们使用以下语句来选择当周出生的出生日期:

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的列吗?

提前感谢您的帮助!

4 个答案:

答案 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

你所处的条件不满足为什么它会返回falseEmpty Result

检查Manual here

答案 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字段,因此您将避免进行表扫描。