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.
