Una expresión regular para tratar los NIF españoles eliminando todos los caracteres que no sean números o letras. Además, comprueba el tamaño del NIF para eliminar el código de país (identificador fiscal comunitario) si fuera necesario:
select result1 ORIGINAL_TAXID, upper( regexp_replace( regexp_replace(result1, '[^[:alnum:]]', ''), -- Remove non-digit and non-alphabetic characters '^(ES)([[:alnum:]]{9})$', -- Identify spanish NIFs with country code '\2')) CLEAN_AND_NATIONAL_TAXID -- Remove spanish country code from ( WITH test AS (SELECT 'ESA45678901,B23456789,GB3456789,12345678L,B234567890123,ES-A45678901,B.23456789,GB3::456789,B234_567_890123' col1 FROM dual) SELECT regexp_substr(col1, '[^,]+', 1, rownum) result1 FROM test CONNECT BY LEVEL <= regexp_count(col1, ',') + 1);
El resultado es:
ORIGINAL_TAXID CLEAN_AND_NATIONAL_TAXID -------------- ------------------------ ESA45678901 A45678901 B23456789 B23456789 GB3456789 GB3456789 12345678L 12345678L B234567890123 B234567890123 ES-A45678901 A45678901 B.23456789 B23456789 GB3::456789 GB3456789 B234_567_890123 B234567890123
En el artículo Tratamiento de NIF españoles se muestra una expresión regular para añadir el código de país.