2010-12-13 232 views
18

En una columna de tabla en una cadena, podemos tener números/caracteres especiales/espacios en blanco. Quiero reemplazar números/caracteres especiales/espacio en blanco con el carácter vacío, veo que hay una función llamada regexp_replace, pero cómo utilizar la ayuda no es muy fácil de usar, por ejemplo, quiero usar la siguiente cadena.postgres regexp_replace queremos permitir solo a-z y A-Z

String = 'abc$wanto&toremove#special~chars' 

Quiero eliminar todos los caracteres especiales y números de secuencia por encima quieren permitir sólo a-z y A-Z resto de caracteres debe ser sustituido por '' cómo hacerlo?

Respuesta

43
select regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]', '', 'g') 
0

debe ser:

regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]+', '') 
+0

no lo puedo intentar el trabajo por yoursef seleccionar REGEXP_REPLACE ('abc123', 'a-ZA- Z ',' ') –

+0

Lo siento, me perdí los corchetes, y lamentablemente no puedo probarlo por el momento – Pit

7

para hacerlo más sencillo:

regexp_replace('abc$wanto&toremove#special~chars', '[^[:alpha:]]') 
+1

esto funciona, aunque por alguna razón parece estar ausente de [los documentos] (http://www.postgresql.org/ docs/9.3/static/functions-matching.html # POSIX-CLASS-SHORTHAND-ESCAPES-TABLE) –

+4

'select regexp_replace ('abc $ wanto & toremove # special ~ chars', '[^ [: alpha:]]', '' , 'g') ' –

3

Para mí Esta funcionó.

regexp_replace(code, '[^a-zA-Z0-9]+', '','g')  

Como agrega un filtro global por lo que repite la expresión regular para toda la cadena.

ejemplo,

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '')  

devoluciones: "WellThis-no funcionó & * ($ %%) _"

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '','g')  

devoluciones: "WellThisDidNotwork"

que tiene los caracteres no queremos que se elimine

+0

¿cuál es el uso de g en la expresión anterior? usted me dice por favor –

+0

Es un modificador global. "g es para la búsqueda global. Lo que significa que coincidirá con todas las apariciones." Explicación aquí: https://stackoverflow.com/questions/12993629/what-is-the-meaning-of-the-g-flag- in-regular-expressions –

+0

Gracias. Estaba buscando algo para eliminar espacios en blanco, pero no pudo lograrlo especificando los tipos de espacios en blanco. Usar una coincidencia invertida contra caracteres alfanuméricos es mucho más fácil (siempre que no tenga caracteres especiales que quiera conservar). – otocan

3

Si desea reemplazar el carbón con el carbón no es especial más cercana, se puede hacer algo como esto:

select 
    translate(
    lower(name), ' ''àáâãäéèëêíìïîóòõöôúùüûçÇ', '--aaaaaeeeeiiiiooooouuuucc' 
) as new_name, 
    name 
from cities; 
Cuestiones relacionadas