WITH t AS ( SELECT '108745100054' v FROM dual UNION ALL SELECT '109951110073' FROM dual UNION ALL SELECT '108795220012' FROM dual ) SELECT v , SUBSTR(v, 3, 6) || SUBSTR(v, 11, 2) x1 , SUBSTR(v, 3, 6) || SUBSTR(v, 11) x2 , SUBSTR(v, 3, 6) || SUBSTR(v, -2) x3 , REGEXP_REPLACE(v, '..(......)..(..)', '\1\2') x4 , REGEXP_REPLACE(v, '..(.{6})..(..)', '\1\2') x5 FROM t ;