0

db 行に 3 つの日付列があります。列は互いに独立しており、いずれの列にもデータを入力するか、NULL にすることができます。

日付列のいずれかが既知の範囲内にあるすべての行を見つけるためにチェックしたいと思います。

これは私のWHERE句にあるものです:

WHERE (d.date1 OR d.date2 OR d.date3) 
    BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'

これが機能しない理由についてのアイデアをいただければ幸いです。

どうもありがとう

4

4 に答える 4

1

論理的な「OR」がどのように機能するかを誤解しています。

WHERE (d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
   OR (d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
   OR (d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46')
于 2013-06-04T13:32:53.953 に答える
0

3 つの部分を個別に指定する必要があります。

いずれかの日付に値があるかどうか(d.date1 OR d.date2 OR d.date3)が評価されることに注意してください。そのため、句は現在これと同等です。trueWHERE

WHERE TRUE BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'

したがって、各日付を個別にテストする必要があります。

WHERE d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'
   OR d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'
   OR d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'
于 2013-06-04T13:33:26.357 に答える
0

次のようにする必要があります。

WHERE (d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46')
OR (d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46')
OR (d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46')
于 2013-06-04T13:33:56.027 に答える
0

Between 演算子は Between の左側に単一の値を必要とするためです。シーケンスを逆にします...次のように:

WHERE d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' Or
      d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' Or
      d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'
于 2013-06-04T13:34:43.703 に答える