跨越多年的日期之间的mySQL

时间:2011-03-21 14:54:11

标签: mysql datetime date-format between

嗨,我想知道为什么这句话在mySQL中起作用

SELECT COUNT(*) AS `numrows` 
FROM (`myTable`) 
WHERE DATE_FORMAT(creationDateTime, '%m/%d/%Y') BETWEEN '02/21/2011' AND '03/20/2011'

但这不是

SELECT COUNT(*) AS `numrows` 
FROM (`myTable`) 
WHERE DATE_FORMAT(creationDateTime, '%m/%d/%Y') BETWEEN '12/21/2010' AND '03/20/2011'

第一个语句返回'xx'行数,而第二个返回'0'

我看到的唯一区别是“来自”日期是在2010年,“结束”日期是在2011年。为了测试这是否是我从'12 / 31/2010'查询的问题,它仍然给了我0结果,但当我将开始日期设置为'01 / 01/2011'时,它给了我在该时间跨度内创建的记录数。

关于mySQL的BETWEEN和使用不同年份的日期,我有什么遗漏吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

尝试使用日期格式BETWEEN '2010-12-21' AND '2011-03-20'。同时删除DATE_FORMAT()函数。

所以,这个:

SELECT COUNT(*) AS `numrows` 
FROM `myTable` 
WHERE creationDateTime BETWEEN '2010-12-21' AND '2011-03-20'

答案 1 :(得分:1)

DATE_FORMAT()返回一个字符串,而不是日期。通过使用它,您将强制进行字符串比较而不是日期比较。您应该省略DATE_FORMAT并使用YYYY-MM-DD日期字符串。