web-dev-qa-db-ja.com

WHERE句はLESS THANおよびGREATER THANまたはBETWEENでフィルタリングしていません

0と4の間の値のMTR値を選択しようとしています。何が問題なのですか?

SELECT 
DATEDIFF(M, TheDate, TheOtherDate) AS MTR FROM MyTable 
WHERE MyID = 2074163
AND MTR >= 0  OR MTR <= 4

MTRの境界の内側と外側の値が1〜4の範囲にある結果を返します(-3〜75)。

交互に

SELECT 
DATEDIFF(M, TheDate, TheOtherDate) AS MTR FROM MyTable 
WHERE MyID = 2074163
and MTR BETWEEN 0 AND 4

0、-2、-3、および-4の結果も返しますが、0より大きく4未満の値はありません(0のエントリを除く)

4
mattw

このための正しい構文は次のとおりです。

SELECT DATEDIFF(M, TheDate, TheOtherDate) AS MTR 
FROM MyTable 
WHERE MyID = 2074163 AND (
    DATEDIFF(M, TheDate, TheOtherDate) >= 0 AND
    DATEDIFF(M, TheDate, TheOtherDate) <= 4
)
3
Max Vernon

Ypercubeのコメントに関連性​​があります。標準によれば、MTR句のWHEREへの参照には無効のフラグを付ける必要があります。しかしそれとは別に、MTRのどの値がORを評価してfalseになると思いますか?

3
Erwin Smout