1

我有一个以月份和年份为列的列。我需要从列中选择一个范围。它们似乎不适用于 2 个范围。

桌子

CREATE TABLE `sampletable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `AccountId` int(11) unsigned NOT NULL,
  `CampaignId` int(11) unsigned NOT NULL,
  `CampaignName` varchar(115) NOT NULL DEFAULT '',
  `Sent` int(11) unsigned NOT NULL,
  `Month` int(11) unsigned NOT NULL,
  `Year` int(11) unsigned NOT NULL,
  `LocationId` int(11) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `AccountId_idx` (`AccountId`),
  KEY `monthy_year_idx` (`Month`,`Year`),
  KEY `locationid_idx` (`LocationId`)
) ENGINE=MyISAM AUTO_INCREMENT=1584

选择语句:

SELECT * FROM sampletable
WHERE AccountId = 1 
and (`Month` >= 10 AND `Year` = 2012)
and (`Month` <= 2 AND `Year` = 2013)
ORDER BY Year asc, month asc

这似乎不起作用。

我是否必须将这些转换为日期格式并在两者之间使用?

4

4 回答 4

5

您正在做的事情类似于“尝试同时向左和向右”。

让我们打破WHERE条款。

你说MySQL要获取行

  1. Year = 2012 AND Year = 2013

  2. Month >= 10 AND Month <= 2

这永远不会是真的。

你的WHERE条款应该看起来像 -

WHERE AccountId = 1 
and ((`Month` >= 10 AND `Year` = 2012)
OR (`Month` <= 2 AND `Year` = 2013))
于 2013-01-24T14:25:40.470 回答
1
 and (     
  (`Month` >= 10 AND `Year` = 2012)
 or (`Month` <= 2 AND `Year` = 2013))
于 2013-01-24T14:24:33.673 回答
1

将条件括在括号周围并使用OR

SELECT ...
FROM ...
WHERE AccountId = 1  AND   
      ((`Month` >= 10 AND `Year` = 2012) OR  (`Month` <= 2 AND `Year` = 2013) )
于 2013-01-24T14:25:15.477 回答
0

要实现您想要的,请使用“或”而不是“和”。

于 2013-01-24T14:23:36.687 回答