0

我有这个mysql查询,它可以在指定日期获取特定数据;

SELECT id FROM mytable WHERE DAY(idate)='11' AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

现在我想获取指定日期的数据和指定日期之外的数据,我试过这个查询并返回零结果;

SELECT id FROM mytable WHERE DAY(idate)='11' AND DAY(idate)<>'11' AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id
4

4 回答 4

1

你的 SQL:

SELECT id FROM mytable WHERE DAY(idate)='11' AND DAY(idate)<>'11' 
                       AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

正在说“从 mytable 中选择日期既等于 11 又不等于 11 的行的 id ...”

这是一个不可能的情况,因此你什么也得不到。

我认为,您真正想要的是“从 mytable 中选择日期等于 11 的行以及日期不等于 11 的行的 id ...”。这与“从 mytable 中选择行的 id 而不管日期的值...”或:

SELECT id FROM mytable WHERE MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id
于 2013-01-20T14:21:44.090 回答
0

您可以使用您的第一个查询并从查询表中减去,或者您可以修复您的查询(阅读德摩根定律):

SELECT id
    FROM mytable 
         WHERE DAY(idate)<>'11' OR MONTH(idate)<>'01' OR MONTH(idate)='01' OR YEAR(idate)='2013'
 GROUP BY id
于 2013-01-20T14:21:22.620 回答
0

您目前的查询基本上将其作为 WHERE 子句:

where 1 = 1
and   1 <> 1

显然两者都不可能是真的。同样,您的过滤器DAY(idate)是互斥的。很难准确理解您要达到的目标。也许您应该完全删除 DAY() 上的测试?

SELECT id 
FROM mytable 
WHERE MONTH(idate)='01' 
AND YEAR(idate)='2013' 
GROUP BY id
于 2013-01-20T14:22:45.897 回答
0

尝试OR代替AND

SELECT id 
FROM mytable t1
WHERE DAY(idate)<>'11'
  OR ( DAY(idate) = '11' 
      AND MONTH(idate)='01' 
      AND YEAR(idate)='2013' 
    )
GROUP BY id
于 2013-01-20T14:19:11.747 回答