mysql - 如何按日期范围获取数据仅给出月份和年份

时间:2013-01-22 08:41:19

标签: mysql

下面是我的mysql表:

--------------------------
ID  Date_From   Date_To
--------------------------
1   2011-02-01  2011-02-28
2   2012-09-01  2012-09-30
3   2012-10-01  2012-10-30
4   2012-11-01  2012-11-30
5   2012-12-01  2012-12-30
6   2013-01-01  2013-01-30
7   2014-03-01  2014-03-31

我有这个mysql声明:

SELECT *
FROM TIME_PERIOD
WHERE
  (YEAR(DATE_FROM) >= '2012' AND MONTH(DATE_FROM) >= '10')
  AND (YEAR(DATE_TO) <= '2013' AND MONTH(DATE_TO) <= '12');

仅返回ID 3, 4,5的记录。我希望返回的是ID 3, 4, 5,6的记录。

请帮忙。

5 个答案:

答案 0 :(得分:3)

你需要使用这样的查询:

SELECT * FROM TIME_PERIOD WHERE 
(YEAR(DATE_FROM) >= '2013' OR (YEAR(DATE_FROM) >= '2012' AND
 MONTH(DATE_FROM) >= '10')) AND 
(YEAR(DATE_TO) <= '2013' AND MONTH(DATE_TO) <= '12');

答案 1 :(得分:2)

月份在记录6中似乎是01.它不会返回,因为MONTH(DATE_FROM)&gt; ='10'

答案 2 :(得分:2)

在id 6中,起始日期是2013-01-01,它在2013-01-01中失败,因为月份是01,小于10.正如你提到的所有和条件所以任何虚假都不包括该记录

答案 3 :(得分:2)

您可以像YYYYMM一样创建一个单独的列year_month,并创建两个触发器,以便在需要时自动更新列ON INSERT和ON UPDATE。

然后查询就像

一样简单

WHERE year_month&gt; = 201210和year_month&lt; = 201312

答案 4 :(得分:0)

您可以使用此命令获取结果......

SELECT * FROM `TIME_PERIOD` WHERE `DATE_FROM` >= '2012-10-01' AND `DATE_TO` <= '2013-01-30'