2014-02-06 53 views
0

我有一个发现4月1日和四月的,看起来像这样30日之间的所有记录的查询:查询发现两个日期之间的记录不工作

SELECT * 
FROM `ar_videos` 
WHERE created 
BETWEEN '2013-04-01' 
AND DATE_ADD( '2013-04-01', INTERVAL 1 
MONTH) 

每当我运行查询它显示的记录从五月份而不是四月份。我的查询有什么问题?

+0

除了WHERE子句的格式是可怕的吗?你是否需要将字符串'2013-04-01''转换为适当的类型? 'created'列的类型是什么? –

+0

“创建”是什么列类型?您可能需要添加一个月并减去一天以获得四月的真正“结束”。返回'2013-05-01'。 – tadman

+0

'created'列是日期。 – Nanor

回答

0

你可能想解决您的范围:

created BETWEEN '2013-04-01' AND DATE_SUB(DATE_ADD('2013-04-01', INTERVAL 1 MONTH), INTERVAL 1 DAY) 

此发现2013-04-012013-04-30之间的事情。请记住,BETWEEN最多并且包括范围的结尾。

0

你得到你问什么了:

mysql> select DATE_ADD('2013-04-01', INTERVAL 1 MONTH); 
+------------------------------------------+ 
| DATE_ADD('2013-04-01', INTERVAL 1 MONTH) | 
+------------------------------------------+ 
| 2013-05-01        | 
+------------------------------------------+ 

记住between是一个包容性的比较,

foo BETWEEN bar AND baz 

相同

(bar <= foo) AND (foo <= baz) 

如果你想仅限4月份的记录,您可以尝试

WHERE (YEAR(datefield) = 2013) AND (MONTH(datefield) = 4) 

WHERE (datefield >= '2014-04-01') AND (datefield < '2014-05-01') 
               ^--note, <, not <= 
+0

这在技术上是真实的,但对你的数据库绝对是有害的,因为这会导致自动表扫描。 – tadman

相关问题