2016-04-08 9 views
0

Aşağıdakileri deniyorum ama hiçbir (boş) değer döndürmüyor. Null değerlerini oracle ile düzenli bir ifadeyi kullanarak nasıl ekleyebilirim ve aslında null dahil olmak üzere her şeyi döndürürüm. (Değeri her zaman boş olmayacak Python değişken ve böylece değeri ile değiştirilir gibi Aksi ben sadece ifadesini dışarı bırakabilir. Bir düzenli ifade kullanmak gerekir.)Açıklama: oracle regex

SELECT * from table WHERE 
REGEXP_LIKE (column1,'.*|NULL$') 
+2

'NULL' bir dize değil. Regex yalnızca bir * string * deseniyle eşleşebilir. –

+0

Yani null eklemek istediğimde bunu yapmanın en şık yolu ne olurdu? – Nickpick

+0

Sizi null ya da herhangi bir (null olmayan) değeri arıyorsanız, bu kontrol noktasını biraz anlamsız kılar mı? Yoksa regex * pattern * 'in bir değişkenden geldiğini mi söylüyorsunuz? Öyleyse örnek deseniniz biraz kafa karıştırıcı. Kullandığınız çalışma olduğu gibi. –

cevap

1

İki yöntemleri.

Açık karşılaştırması:

WHERE (REGEXP_LIKE(column1, '.*') OR column1 IS NULL) 

veya yerleştirilecek: sütunu zaten yedek dizesi olabilir çünkü

WHERE REGEXP_LIKE(COALESCE(column1, '<NULL>'), '.*|<NULL>') 

ikinci yöntem, daha tehlikelidir.

+0

farklı bir değer var İkinci yöntem regexp içinde alternatifi -^ $ – mathguy

+0

olarak değiştirerek güvenli hale getirilebilir. Bununla birlikte, ilk yöntemin hem okunması hem de anlaşılması daha kolay olduğu ve daha verimli olduğu (COALESCE çağrısı yok her satırda ve NULL değerleri için ek dize karşılaştırması yok). – mathguy

+0

@mathguy - sütun değeri aslında '' ise yanlış bir eşleşme elde edebilirsiniz ''; çapalar, daha uzun bir değerin parçasıysa, onu eşleştirmeyi durdurabilir mi? –