簡體   English   中英

SQL查詢給定日期范圍之前和之后的x-日期

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM