2017-04-24 61 views
0

我試圖在給定的日期範圍之前和之後提取x天。我制定瞭如下查詢給定日期範圍之前和之後的x日期的SQL查詢

SELECT a,b,date FROM table.test 
WHERE date < "2012-09-07" - INTERVAL 2 DAY 
    AND date > "2012-09-08" + INTERVAL 2 

另一種方法是不BETWEEN方法也。他們似乎都沒有給我正確的答案。該datevarchar(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 

datevarchar(30) DEFAULT NULL類型的數據庫中

+0

是否有任何理由爲什麼你的數據庫日期不是日期字段? –

+0

我只是從數據庫中提取數據。我也有同樣的問題 – Betafish

+0

編輯你的問題,並提供樣本數據和期望的結果。 –

回答

1

Go for this:

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。我更喜歡expicit(日期)類型轉換。

更新:仔細重新閱讀你的問題,上面的陳述可能不是你正在尋找的。如果戈登去是正確的,如果你想使用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'); 

這是基本相同的。

+0

我瞭解您的查詢。但奇怪的是,我得到'2012-11-13 12:31:10' ''2013-01-11 04:43:35' '2012-10-09 14:40:58' '2015-07 -22 14:49:34' '2014-07-12 11:20:02' '2013-04-17 21:33:16' '2012-10-26 10:02:51' '2013 -09-05 08:28:54' '2015-06-01 13:47:32' '2012-10-20 17:17:25' '2015-11-23 00:49:47' '2015-10-19 04:36:35' '2014-05-21 08:27:10' '2013-06-17 00:37:23' '2014-09-15 13:11:47 「'。我剛剛在我的mysql工作臺上覆制了你的查詢。 – Betafish

+0

再次仔細閱讀,我認爲戈登Linoff是在正確的軌道上,是不是?雖然我仍然不是隱式類型轉換的朋友......;) – Trinimon

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

我不知道,如果你想>/<>=/<=

相關問題