Mysql 查询以查找两个日期之间不起作用的记录

Mysql 查询以查找两个日期之间不起作用的记录,mysql,Mysql,我有一个查询,可以查找4月1日到4月30日之间的所有记录,如下所示: SELECT * FROM `ar_videos` WHERE created BETWEEN '2013-04-01' AND DATE_ADD( '2013-04-01', INTERVAL 1 MONTH ) 每当我运行查询时,它都会显示5月份而不是4月份的记录。我的查询有什么问题?您得到的正是您想要的: mysql> select DATE_ADD('2013-04-01', INTERVAL 1

我有一个查询,可以查找4月1日到4月30日之间的所有记录,如下所示:

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

每当我运行查询时,它都会显示5月份而不是4月份的记录。我的查询有什么问题?

您得到的正是您想要的:

mysql> select DATE_ADD('2013-04-01', INTERVAL 1 MONTH);
+------------------------------------------+
| DATE_ADD('2013-04-01', INTERVAL 1 MONTH) |
+------------------------------------------+
| 2013-05-01                               |
+------------------------------------------+
请记住,之间的
是一种包容性比较

foo BETWEEN bar AND baz

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

其中(日期字段>='2014-04-01')和(日期字段<'2014-05-01')

^--注意,您可能需要修复您的范围:

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

这将查找介于
2013-04-01
2013-04-30
之间的内容。请记住,
BETWEEN
达到并包括范围的末尾。

除了WHERE子句的格式很糟糕之外?是否需要将字符串
'2013-04-01'
转换为适当的类型?创建的
列的类型是什么?创建的
列的类型是什么?你可能想加上一个月,减去一天,得到真正的四月底。返回
2013-05-01
。创建的
列是一个日期。这在技术上是正确的,但对数据库来说绝对是致命的,因为这会导致自动表扫描。
WHERE (datefield >= '2014-04-01') AND (datefield < '2014-05-01')
                                                 ^--note, <, not <=
created BETWEEN '2013-04-01' AND DATE_SUB(DATE_ADD('2013-04-01', INTERVAL 1  MONTH), INTERVAL 1 DAY)