2017-04-24 18 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 

他のアプローチでもありませんでした。彼らの誰も私に正解を与えてくれないようです。 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である

+0

データベースの日付が日付フィールドでない理由はありますか? –

+0

私はちょうどDBからデータを引っ張っています。私も同じ問題があった – Betafish

+0

あなたの質問を編集し、サンプルデータと希望する結果を提供してください。 –

答えて

1

移動:

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; 

主にANDORに置き換える必要があります。私は、expicit(date)型変換も好むでしょう。

更新:質問をよく読んでください。上記の文章は、あなたが探しているものとは異なる場合があります。ゴードンはそれが右に行くとあなたが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 ' ' -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

もう一度注意深く読んで、私はゴードン・リノフが正しい道にいると思います。私はまだ暗黙の型変換の友人ではありません...;) – 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 
    ); 

私はあなたが>/<または>=/<=をしたいかはわかりません。