2008-10-27 30 views
5

Ben aşağıdaki SQL-deyimi vardır: O Postgres üzerinde çalışıyorBu SQL deyimi neden çalışmıyor?

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

(boş değildir ve dizeyi içeren günlüğünden tüm farklı isimler, döner '.EDIT'). Ancak Oracle'da bu ifade işe yaramıyor. Bir fikrin neden?

cevap

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

1) Oracle :-) bu bilgi davranır' soruyla genişletmek Lütfen; bunun yerine "IS NOT NULL" kullanın. Ama ...

2) İkinci koşul "adı LIKE '% .EDIT%' gereksiz birinci koşulu yapım zaten boş bir dize maç olmayacak Yani

olarak-yazma yeniden.

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

Bu yardım için teşekkürler. İyi çalışıyor! Ben gereksiz şeyler hakkında böyle bir aptalım. Ama ben de bilmedim, Oracle 'NULL olarak sayıyor. Teşekkür ederim, şimdi çalışıyor. – Mnementh

3

Oracle'daki boş dize, NULL ile eşdeğerdir ve karşılaştırmanın başarısız olmasına neden olur. Sorgunun bu bölümünü değiştirme NAME IS NULL

2

Bu sorguyu "NOT NAME = ''" yan tümcesi olmadan yeniden yazabilirsiniz.

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

Bu sizin için çalışıyor mu?

Değilse, hangi şekilde çalışmıyor? Bir hataya neden olur mu? Yanlış sonuçlar döndü mü?

' " 'karşılaştırma isim = DEĞİL' anlamına NULL," doğru veya yanlış asla