WITH T ( VAL ) AS (
SELECT '0001000200140005' FROM DUAL
)
SELECT REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 1 ) VAL1
, REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 2 ) VAL2
, REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 3 ) VAL3
, REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 4 ) VAL4
-- concat
, REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 1 ) ||
'0003' ||
REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 3 ) ||
REGEXP_SUBSTR(VAL, '(.){4}' , 1 , 4 ) TOT_VAL
-- replace
, REGEXP_REPLACE(VAL, '(\d{4})(\d{4})(\d{4})(\d{4})' , '\10003\3\4' )
FROM T
감사합니다. REGEXP_REPLACE 써볼까 하는데요...
문제는 해당 컬럼이 자리수가 크다 보니 4자리씩 600 = 2400 자리까지 갈수 있습니다.
몇자리 안되면 저런식으로 해보겠는데 일단 파라미터로 변경하고자 하는 위치는 받을 수있습니다.
위의 예를 보자면 2번째를 알수는 있거든요
이경우 2번째부터 4자리만 replace해서 update 할수 있으면 됩니다만...
-- 양이 많고 하나만 고치신다면.. WITH T ( VAL ) AS ( SELECT '0001000200140005' FROM DUAL ) -- :no 몇번째 값 SELECT SUBSTR(VAL, 1 , 4 * ( :NO - 1 ) ) || '0003' || SUBSTR(VAL, 4 * ( :NO ) + 1 , LENGTH(VAL) ) FROM T