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 incluir 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 '^([[:alnum:]]{1}[[:digit:]]{1})([[:alnum:]]{7})$', -- Identify spanish NIFs without country code 'ES\1\2')) CLEAN_AND_COMPLETE_TAXID -- Add 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_COMPLETE_TAXID --------------- ------------------------ ESA45678901 ESA45678901 B23456789 ESB23456789 GB3456789 GB3456789 12345678L ES12345678L B234567890123 B234567890123 ES-A45678901 ESA45678901 B.23456789 ESB23456789 GB3::456789 GB3456789 B234_567_890123 B234567890123
Pingback: Tratamiento de NIF españoles (parte 2) | desc EMP