2016-04-09 15 views
-2

Sağlanan karakter listesinde olmayan bir karakter dizisindeki tüm karakterleri nasıl silebilirim?Bir dizeden sağlanan listede olmayan tüm karakterleri silmek için Postgres regexp_replace özelliğini kullanma

Örneğin

: "geçerli" karakterlerin listesi işlenecek 2,n,w,s

Dize '24nQ/m' olduğunu ve sonucu olmalıdır '2n'

+1

bir negatif karakter sınıfını kullanın:


bir başka yolu translate fonksiyonunu kullanmaktır. Tüm oluşumları değiştirmek için 'g' işaretini geçmeyi unutmayın. –

+1

Bunun neden çok geniş bir soru olacağını anlamıyorum. Açıkça ifade edildi ve bunun için iki geçerli cevap gördük. – sal

cevap

1

Sen boş dize ile başka bir karakter yerine regex_replace kullanabilirsiniz:

SELECT *, 
     regexp_replace(col, '[^2nws]','','g') AS replaced 
FROM tab; 

SqlFiddleDemo

Çıktı:

╔═══════════╦══════════╗ 
║ col  ║ replaced ║ 
╠═══════════╬══════════╣ 
║ 24nQ/m ║ 2n  ║ 
║ 2444nQ/m ║ 2n  ║ 
║ aaa  ║   ║ 
║ Nn  ║ n  ║ 
╚═══════════╩══════════╝ 

Eğer durum kullanacağım 'gi' bayrağını görmezden istiyorsanız

.

SELECT *, 
     translate(col, translate(col, '2nws','^'),'') AS replaced 
FROM tab; 

SqlFiddleDemo2

İlgili konular