2016-11-18 2 views
2

Das ist verwirrend für mich. Ich habe die folgende Abfrage:WHERE NULL-Klausel, die NULL-Werte zurückgibt

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

wie es sein sollte, sollte es nur Zeilen zurück, wo die END_DATE NULL ist, aber ich bin immer Zeilen, die ein Datum in ihnen haben.

Der Datentyp ist DATE und der Datenstandard ist (null), also habe ich keine Ahnung, warum es auch einige Zeilen mit Daten zurückgibt. Habe ich gerade einen Hirnpupser? Es ist Freitag, also entschuldige ich mich, wenn ich etwas Einfaches vermisse.

Jede Hilfe würde sehr geschätzt werden!

EDIT: Ich bin ein ziemlich Idiot. Ich meine Klammer vergessen, sollte der Code wie folgt aussehen:

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

Sie könnten in Operatorpräzedenz interessiert sein – Mihai

+3

Sie ein ODER haben in Ihrer Filterliste. Ich kann mir vorstellen, dass Sie irgendwo Klammern verwenden wollen. –

+7

Ein Hinweis: Was ist der Unterschied zwischen 1 + 1 * 8 und (1 + 1) * 8? – dfundako

Antwort

1

Sie erscheinen einige() zu fehlen die richtige precendence zwischen „AND“ s und Ihrem „OR“ s zu gewährleisten.

zB

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