uso regexp_replace regexp_like regexp_instr regexp only multiple examples ejemplos characters regex oracle plsql

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