[英]SQL query for x- dates before and after a given date range
我正在尝试提取给定日期范围之前和之后的x天。 我制定了如下查询
SELECT a,b,date FROM table.test
WHERE date < "2012-09-07" - INTERVAL 2 DAY
AND date > "2012-09-08" + INTERVAL 2
另一种方法也不是BETWEEN方法。 他们似乎都没有给我正确的答案。 date
在数据库中的类型为varchar(30) DEFAULT NULL
样本数据
a b date
2 4 2012-09-07
3 2 2012-09-05
5 3 2012-09-08
7 4 2012-09-07
8 5 2012-09-06
9 6 2012-09-07
3 7 2012-09-09
我正在寻找以下内容:
a b date
3 2 2012-09-05
3 7 2012-09-09
date
在数据库中的类型为varchar(30) DEFAULT NULL
为此:
SELECT a,b,date
FROM table.test
WHERE date < str_to_date('2012-09-07', '%Y-%m-%d') - INTERVAL 2 DAY
OR date > str_to_date('2012-09-08', '%Y-%m-%d') + INTERVAL 2 DAY;
主要是, AND
需要替换为OR
。 我也希望进行显式(日期)类型转换。
更新 :请仔细阅读您的问题,上面的陈述可能不是您想要的陈述。 如果戈登说得对,并且您想使用BETWEEN
,则可以:
SELECT a,b,date
FROM table.test
WHERE date BETWEEN str_to_date('2012-09-07', '%Y-%m-%d') - INTERVAL 2 DAY AND
str_to_date('2012-09-08', '%Y-%m-%d') + INTERVAL 2 DAY
AND date NOT BETWEEN str_to_date('2012-09-07', '%Y-%m-%d') AND
str_to_date('2012-09-08', '%Y-%m-%d');
这基本上是相同的。
您只需向后比较即可:
SELECT a, b, date
FROM table.test
WHERE (date >= '2012-09-07' - INTERVAL 2 DAY AND
date < '2012-09-07'
) OR
(date > '2012-09-08' AND
date <= '2012-09-08' + INTERVAL 2
);
我不确定是否要>
/ <
或>=
/ <=
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.