在给定日期范围之前和之后的x-日期的SQL查询

时间:2017-04-24 10:10:09

标签: mysql sql

我想在给定的日期范围之前和之后提取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

2 个答案:

答案 0 :(得分:1)

去吧:

AND

主要是,OR需要替换为BETWEEN。我也喜欢expicit(日期)类型转换。

更新:仔细阅读您的问题,上面的陈述可能不是您正在寻找的陈述。如果戈登说得对,如果你想使用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'); ,你可以选择:

-----------------
|ID|user_no|paid|
|---------------|
|1 |1      |yes |
|2 |1      |yes |
|3 |1      |no  |
|4 |2      |yes |
|5 |2      |no  |
|---------------|

这基本相同。

答案 1 :(得分:1)

你只是向后比较:

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
      );

我不确定您是否需要> / <>= / <=