MySQL子句在where子句中

时间:2014-05-06 15:22:27

标签: mysql

我有一个表格,其中包含日期(字段类型:日期和日期格式:%Y-%m-%d)作为字段。我需要从12月3日到12月24日之间的所有年份中选择表格中的所有行。

该表包含月份和日期作为单独的字段。

可以使用以下查询获得结果:

select * from mytable where date not in (select date from mytable where month=12 and day between 3 and 24);

但是我试图在一个查询中得到结果,如下面一个,但它给出了空行:

select * from mytable where date not between '%Y-12-03' and '%Y-12-24';

可以在像上面那样的单个查询中完成吗?

1 个答案:

答案 0 :(得分:3)

SELECT *
FROM mytable
WHERE MONTH(`date`) <> 12
  OR DAY(`date`) NOT BETWEEN 3 AND 24
;

这将为您提供符合要求的每一行。我确信有人有更快的方法来执行此操作,因为这将忽略所有索引并且可能在大型数据集上很慢,但它确实有效并返回您需要的数据,因此如果没有人可以建议改进这将回答你的问题。