regexp_replace - Oracle PL/SQL: elimine "caracteres de espacio" de una cadena
regexp_instr (6)
Como te sientes cómodo con las expresiones regulares, probablemente quieras usar la función REGEXP_REPLACE. Si desea eliminar cualquier cosa que coincida con la clase POSIX [: space:]
REGEXP_REPLACE( my_value, ''[[:space:]]'', '''' )
SQL> ed
Wrote file afiedt.buf
1 select ''|'' ||
2 regexp_replace( ''foo '' || chr(9), ''[[:space:]]'', '''' ) ||
3 ''|''
4* from dual
SQL> /
''|''||
-----
|foo|
Si desea dejar un espacio en su lugar para cada conjunto de caracteres de espacio continuo, simplemente agregue +
a la expresión regular y use un espacio como el carácter de reemplazo.
with x as (
select ''abc 123 234 5'' str
from dual
)
select regexp_replace( str, ''[[:space:]]+'', '' '' )
from x
En mi base de datos Oracle 10g me gustaría eliminar "caracteres de espacio" (espacios, tabulaciones, retornos de carro ...) de los valores de un campo de tabla.
¿Es TRANSLATE()
el camino a seguir? Por ejemplo algo como:
MY_VALUE := TRANSLATE(MY_VALUE,
CHR(9) || CHR(10) || CHR(11) || CHR(12) || CHR(13) || '' '', '''');
¿O hay alguna alternativa mejor (algo como [:space:]
en PHP PCRE)?
Gracias por cualquier consejo.
Me gustaría ir a regexp_replace, aunque no estoy 100% seguro de que sea utilizable en PL / SQL
my_value := regexp_replace(my_value, ''[[:space:]]*'','''');
Para eliminar cualquier espacio en blanco que puedas usar:
myValue := replace(replace(replace(replace(replace(replace(myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13));
Ejemplo: eliminar todos los espacios en blanco en una tabla:
update myTable t
set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
length(t.myValue) > length(replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13)));
o
update myTable t
set t.myValue = replace(replace(replace(replace(replace(replace(t.myValue, chr(32)), chr(9)), chr(10)), chr(11)), chr(12)), chr(13))
where
t.myValue like ''% %''
Para reemplazar uno o más caracteres de espacio en blanco por un solo espacio en blanco, debe usar {2,}
lugar de *
, de lo contrario, insert
un espacio en blanco entre todos los caracteres que no estén en blanco.
REGEXP_REPLACE( my_value, ''[[:space:]]{2,}'', '' '' )
Versión más corta de:
REGEXP_REPLACE( my_value, ''[[:space:]]'', '''' )
Sería:
REGEXP_REPLACE( my_value, ''/s'')
Ninguna de las declaraciones anteriores eliminará los caracteres "nulos".
Para eliminar "nulos" encierre la declaración con un reemplazo
Al igual que:
REPLACE(REGEXP_REPLACE( my_value, ''/s''), CHR(0))
select regexp_replace(''This is a test '' || chr(9) || '' foo '', ''[[:space:]]'', '''') from dual;
REGEXP_REPLACE
--------------
Thisisatestfoo