我想从查询参数的表格中选择所有记录:
from_month:09
to_month:03
从2011年开始
to_year:2014
我正在尝试以下查询:
Select * from Table
where month(created_at) between '09' and '03'
and year(created_at) between '2011' and '2014'
虽然数据在那里但它返回零记录,因为from_month大于月份。
我甚至尝试过查询来直接比较日期而不是月份和年份,但它仍然会返回零记录。
答案 0 :(得分:0)
where month(created_at) between '09' and '03'
而不是
where month(created_at) between '03' and '09'
或使用大于和小于
的方式SELECT * FROM tbl WHERE month(created_at)>='09' AND month(created_at)<='11'
答案 1 :(得分:0)
您的查询失败有两个原因。首先,between
首先需要有下限,然后是上限。因此,beween 9 and 3
将始终为您提供0
条记录
其次,它会遗漏例如'2012-01-01'
和'2012-02-28'
之间的记录以及'2012-10-01'
和'2013-02-28'
之间的记录。
不要让事情变得更复杂。
SELECT * FROM table1
WHERE created_at BETWEEN '2011-09-01' AND '2014-03-31'
这样做也更好,因为MySQL不能在应用函数的列上使用索引。
如果您不知道,如果上一天的日期是30日,31日,28日甚至29日,您可以这样做:
SELECT * FROM table1
WHERE created_at BETWEEN '2011-09-01' AND LAST_DAY('2014-03-01');
另请注意,当created_at
列的类型为timestamp或datetime时,您必须附加时间。否则你将错过最后一天的记录。
SELECT * FROM table1
WHERE created_at BETWEEN '2011-09-01' AND '2014-03-31 23:59:59'
如果您没有追加时间,它会自动变为00:00:00
,因此您会错过2014-03-31
。