2008-10-27 22 views
5

Mam następujący instrukcja_sql:Dlaczego ta instrukcja SQL nie działa?

SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%'; 

to działa dobrze na PostgreSQL (zwraca wszystkie różne nazwy z dziennika, które nie są puste i zawierać ciąg „.EDIT”). Ale w Oracle to oświadczenie nie działa. Każdy pomysł, dlaczego?

Odpowiedz

16
SELECT DISTINCT name FROM log WHERE NOT name = '' AND name LIKE '%.EDIT%'; 

1) Oracle traktuje jako NULL '', co oznacza porównanie "NIE name = ''" nie jest prawdziwe, czy fałszywe; zamiast tego użyj "IS NOT NULL". Ale ...

2) Drugi warunek „name LIKE '% .EDIT%' nie pasuje pusty ciąg mimo to, dzięki czemu pierwszy warunek redundantny

So ponownie napisać jak:.

SELECT DISTINCT name FROM log WHERE name LIKE '%.EDIT%'; 
+0

Dziękuję za pomoc, działa dobrze! Jestem idiotą w kwestii zbędnych rzeczy, ale nie wiedziałem, że Oracle liczy się jako NULL, dziękuję, teraz to działa. – Mnementh

3

Pusty ciąg znaków w Oracle jest równoważny wartości NULL, co powoduje niepowodzenie porównania. Zmień część zapytania na NAZWĘ NIE JEST NULL

2

Możesz przepisać zapytanie bez klauzuli "NOT NAME =" ".

SELECT DISTINCT name 
FROM log 
WHERE name LIKE '%.EDIT%'; 

Czy to działa dla Ciebie?

Jeśli nie, w jaki sposób nie działa? Czy powoduje błąd? Czy zwrócono nieprawidłowe wyniki?

Proszę rozwinąć pytanie z tej informacji :-)

Powiązane problemy