下面是我的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
的记录。
请帮忙。
答案 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'