3

ユーザーがレポートを生成できるようにするphpスクリプトがあり、3つの日付範囲を選択するオプションがあります。すなわち

2012-01-01 to 2012-01-31
AND 
2011-01-01 to 2011-01-31
AND 
2010-01-01 to 2010-01-31

しかし、クエリを実行し、特定の日付範囲の間にレコードがない場合、クエリは値を返しません。

これが私の質問です:

 SELECT DealerName WHERE InterviewDate >= "2012/01/01 " AND InterviewDate <= " 2012/03/31"
 AND InterviewDate >= "2012/07/01 " AND InterviewDate <= " 2012/09/31"

後続の日付範囲にデータがないかどうかに関係なく、いずれかの日付範囲でデータが見つかった場合にデータを返すクエリが必要です。

データは、同じデータが複数の日付にある可能性があるテーブルに要約されます。

例えば:

dealerName 1    2012-01-01
dealerName 1    2012-02-31
dealerName 2    2012-03-01
dealerName 1    2012-06-01
dealerName 1    2012-06-31

したがって、2012-01-01と2012-02-31、2012-06-01と2012-06-31の間のデータをクエリしたい場合。1つの日付範囲でこれらすべての範囲を網羅できることはわかっていますが、ユーザーはこれら2つの日付範囲の間のデータを除外したい場合があります。

4

5 に答える 5

10

面接日はxとyの間にできず、zとzzの間にあることもできます。あなたは行方不明ですOR-また、BETWEENオペレーターを見てください

SELECT DealerName
FROM table
WHERE InterviewDate BETWEEN '2012-01-01' AND '2012-01-31'
    OR InterviewDate BETWEEN '2011-01-01' AND '2011-01-31'
    OR InterviewDate BETWEEN '2010-01-01' AND '2010-01-31'

編集、申し訳ありませんが、テーブル名を逃しました:)

于 2013-02-11T07:01:13.883 に答える
4

OR代わりに使用する必要がありますAND

WHERE   (InterviewDate BETWEEN '2012-01-01' AND '2012-01-31')
        OR
        (InterviewDate BETWEEN '2011-01-01' AND '2011-01-31')
        OR
        (InterviewDate BETWEEN '2010-01-01' AND '2010-01-31')

更新1

私はあなたがRelational Division問題を抱えていると思います、

SELECT name
FROM   table1
WHERE  DATE BETWEEN '2012-01-01' AND '2012-02-31'
       OR
       DATE BETWEEN '2012-06-01' AND '2012-06-31'
GROUP BY name
HAVING COUNT(*) = 2
于 2013-02-11T07:00:16.693 に答える
4

ANDの代わりにORを使用しないのはなぜですか?

SELECT DealerName WHERE ( InterviewDate >= "2012/01/01 " AND InterviewDate <= " 2012/03/31" )  OR ( InterviewDate >= "2012/07/01 " AND InterviewDate <= " 2012/09/31" )
于 2013-02-11T07:00:44.933 に答える
3

ORの代わりに使用AND

SELECT DealerName FROM tbl
WHERE InterviewDate >= '2012/01/01' AND InterviewDate <= '2012/03/31'
 OR InterviewDate >= '2012/07/01' AND InterviewDate <= '2012/09/31'
于 2013-02-11T07:00:45.553 に答える
1

2010年、2011年、2012年monthの1月をチェックしているので、ここに私の持ち帰りがあります:)私たちは使用して機能することができます。yearMONTHYEAR

SELECT DealerName
FROM yourtable
WHERE Month(InterviewDate) = 1
AND Year(InterviewDate) IN (2010, 2011, 2012)
;

SELECT DealerName
FROM yourtable
WHERE Month(InterviewDate) IN (1, 2) // if there are particular months
AND Year(InterviewDate) IN (2010, 2011, 2012)
;
于 2013-02-11T07:13:11.630 に答える