我有一个发现4月1日和四月的,看起来像这样30日之间的所有记录的查询:查询发现两个日期之间的记录不工作
SELECT *
FROM `ar_videos`
WHERE created
BETWEEN '2013-04-01'
AND DATE_ADD( '2013-04-01', INTERVAL 1
MONTH)
每当我运行查询它显示的记录从五月份而不是四月份。我的查询有什么问题?
我有一个发现4月1日和四月的,看起来像这样30日之间的所有记录的查询:查询发现两个日期之间的记录不工作
SELECT *
FROM `ar_videos`
WHERE created
BETWEEN '2013-04-01'
AND DATE_ADD( '2013-04-01', INTERVAL 1
MONTH)
每当我运行查询它显示的记录从五月份而不是四月份。我的查询有什么问题?
你可能想解决您的范围:
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
是最多并且包括范围的结尾。
你得到你问什么了:
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 <=
这在技术上是真实的,但对你的数据库绝对是有害的,因为这会导致自动表扫描。 – tadman
除了WHERE子句的格式是可怕的吗?你是否需要将字符串'2013-04-01''转换为适当的类型? 'created'列的类型是什么? –
“创建”是什么列类型?您可能需要添加一个月并减去一天以获得四月的真正“结束”。返回'2013-05-01'。 – tadman
'created'列是日期。 – Nanor