2009-10-28 17 views
26

Aşağıdaki kodu saklı bir yordam içinde var. SQL Not Like not Not

WHERE 
    WPP.ACCEPTED = 1 AND 
    WPI.EMAIL LIKE '%@MATH.UCLA.EDU%' AND 
    (WPP.SPEAKER = 0 OR 
    WPP.SPEAKER IS NULL) AND 
    WPP.COMMENT NOT LIKE '%CORE%' AND 
    WPP.PROGRAMCODE = 'cmaws3' 

DEĞİL GİBİ deyimi

çalışmıyor ve evet herkes diyor önce şey CORE eklemek ve tüm diğer sütunlar Tamam gelmez YORUM sütunlu öğeler vardır.

Bunun nesi yanlış olduğunu bilen var mı?

+2

"Çalışmıyor" ile ne demek istiyorsunuz? Bir istisna atmak mı? Ya da her zaman yanlış olarak değerlendirilir? – Tenner

+0

Lütfen, görüşünüzün iade edilmesi gereken bir satırın ilgili değerlerini gönderebilir misiniz, ama değil mi? – Quassnoi

+0

@mattgcon Eğer sorduğunuz soruyu cevaplayan bir cevap alırsanız, lütfen cevabınızı, oyların altındaki çeke tıklayarak "kabul edin". –

cevap

43

WPP.COMMENT, NULL içeriyorsa, koşul eşleşmeyecektir.

Bu sorgu:

SELECT 1 
WHERE NULL NOT LIKE '%test%' 

hiçbir şey dönecektir. Herhangi bir arama dizesi karşı NULL sütunda üzerinde

, hem LIKE ve NOT LIKE NULL dönecektir.

Lütfen, görüşünüzün döndürülmesi gereken bir satırın ilgili değerlerini gönderebilir misiniz, ama değil mi?

6

Özel COMMENT sütununuzun değeri boş mu?

Bazen GİBİ Null'lar etrafında düzgün davranmayı bilmez.

0

mattgcon,

çalışması gerekir, dışarı yorumladı "DEĞİL GİBİ" çizgi ile aynı SQL çalıştırmak eğer daha fazla satır alabilirim? Değilse, verileri kontrol edin. Sorunuzda bahsettiğinizi biliyorum, ancak gerçek SQL ifadesinin bu maddeyi kullandığını kontrol edin. NULL ile diğer cevaplar da iyi bir fikir.

5

Sadece aynı konuyla karşılaştım ve çözdüm ama bu yazıyı bulmadan önce.

yerine;;

... AND WPP.COMMENT NOT LIKE '%CORE%' ... 

deneyin;

Ve soru olarak görülmeye gerçekten burada umarım sizin için çalışmaya, veya başkasının yaptım aynı şeyi arayan olacaktır benim çözeltisi (var, yanıtlanmadıysa
... AND NOT WPP.COMMENT LIKE '%CORE%' ... 

Temelde benim için çalışmış değerlendirilmesiyle edildi alanın "dEĞİL" diğer tarafı hareketli.

+3

Stackoverflow'a hoş geldiniz. Aslında bu, null'ları içermeyecektir, bu doğru davranıştır çünkü 'null' hiçbir şeye eşit değildir, kendi başına bile değildir. Boşlukları dahil etmek isterseniz, ya "OR Sütun NULL" şeklinde bir koşul ekleyin ya da "COALESCE" ifadesini kullanın, böylece değer asla boş olmaz. – Leigh

3

Sadece bu rastlamak, cevap basittir,kullanmak 210. Test ettiğiniz alanı (kayıtların bazılarında) hiçbir değeri varsa bir metin karşılaştırma araması yaparken, SQL satırları döndürmez, örneğin:

WHERE wpp.comment NOT LIKE '%CORE%' 

Yani, geçici olarak (null bir değeri yerine gelmiş Bu daha sonra boş değerlere sahiptir ve eşleme ölçütlerinin olduğundan herhangi ihmal tüm kayıtları gösterecektir ISNULL komut, eG

WHERE (ISNULL(wpp.comment,'')) NOT LIKE '%CORE%' 

kullanarak boş) kayıtları.İsterseniz, hatırlamanıza yardımcı olması için virgüllere bir şey koyabilirsiniz, örneğin,

WHERE (ISNULL(wpp.comment,'some_records_have_no_value')) NOT LIKE '%CORE%'