2016-11-18 6 views
2

これは私にとって困惑しています。私は次のクエリがあります。それがあるべきとおりどこにNON NULL値を返すNULL句がありますか

SELECT * 
    FROM table.contract 
WHERE end_date IS NULL 
    AND LOWER(NAME) LIKE 'name' 
    OR LOWER(NAME) LIKE '%name1%' 
    OR LOWER(NAME) LIKE '%name2%' 

を、END_DATEがNULLでどこに行のみを返す必要がありますが、私はそれらに日付を持つ行を取得しています。

データ型はDATEで、データの既定値は(null)なので、なぜ日付とともにいくつかの行が返される理由はわかりません。私はちょうど脳のおならを持っていますか?金曜日ですので、何か簡単なことがないと謝罪します。

ご協力いただければ幸いです!

編集:私はかなりばかです。

SELECT * 
    FROM table.contract 
WHERE end_date IS NULL 
    AND (LOWER(NAME) LIKE 'name' 
    OR LOWER(NAME) LIKE '%name1%' 
    OR LOWER(NAME) LIKE '%name2%') 
+5

あなたは、あなたのフィルタリストにORを持つ – Mihai

+3

、演算子の優先順位に興味があるかもしれません。私はあなたがどこかで括弧を使うことを意図していると思います。 –

+7

ヒント:1 + 1 * 8と(1 + 1)* 8の違いは何ですか? – dfundako

答えて

1

あなたは「AND」sおよびあなたの「OR」sの間の正しいも優先を確保するために、いくつかの()不足しているように見える:私は次のようにコードがあるべき、私の括弧を忘れてしまいました。

例えば

SELECT * 
    FROM table.contract 
WHERE end_date IS NULL 
    AND (LOWER(NAME) LIKE 'name' 
    OR LOWER(NAME) LIKE '%name1%' 
    OR LOWER(NAME) LIKE '%name2%') 
関連する問題