2

下面是我的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,and的记录6

请帮忙。

4

5 回答 5

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');
于 2013-01-22T08:50:03.153 回答
2

记录 6 中的月份似乎是 01。它不会返回,因为 MONTH(DATE_FROM) >= '10'

于 2013-01-22T08:44:46.853 回答
2

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

于 2013-01-22T08:46:50.433 回答
2

您可以创建一个单独的列作为 year_month 像 YYYYMM 并创建两个触发器来自动更新列 ON INSERT 和 ON UPDATE 如果需要。

然后查询将很简单

WHERE year_month >= 201210 和 year_month <= 201312

于 2013-01-22T09:03:45.943 回答
0

你可以使用这个命令来得到你的结果......

SELECT * FROM `TIME_PERIOD` WHERE `DATE_FROM` >= '2012-10-01' AND `DATE_TO` <= '2013-01-30'
于 2013-01-22T09:07:44.100 回答