쿼리 하나만 여쭤 볼께요 0 2 989

by 아히고 [2012.01.10 11:17:37]



테이블의 한 컬럼에 아래와 같은 메시지가 들어있습니다.

ex)

안녕하세요 %s 고객님 %s 에 가입해 주셔서 감사합니다. %s 는 %s 일 후 부터 유료로 전환 됩니다.

위와 같이 컬럼에 메시지가 있는데요
저렇게 %s 의 값은 파라미터로 받게 되어있고요
저 파라미터를 변경 하려고 하고 있는데요
======================================================================
안녕하세요 $1 고객님 $2 에 가입해 주셔서 감사합니다. $3 는 $4 일 후 부터 유료로 전환 됩니다.
======================================================================

이런식으로 변경 하려고 합니다.

전에는 그냥 첫번째 %s 를 찾아서 $1으로 전체 update 처주고
다시 첫번째 %s를 찾아면 2번째의 %s가 첫번째로 검색이 되서 다시 그걸 $2로
update 처주고 이런식으로 했었느데요
이거 한번에 변경하는 그런 방법이 있나 여쭤보고 싶습니다.
db는 9i 입니다.


기존엔 이런식으로 UPDATE를 했습니당

SELECT  AA
   ,REPLACE(SUBSTR(AA,1,INSTR(AA,'%s')+1),'%s','$2')||SUBSTR(AA,INSTR(AA,'%s')+2,1000)
 FROM
(select '안녕하세요 $1 고객님 %s 에 가입해 주셔서 감사합니다. %s 는 %s 일 후 부터 유료로 전환 됩니다.' aa from dual)
by 마농 [2012.01.10 14:39:53]
WITH t AS
(
SELECT '안녕하세요 %s 고객님 %s 에 가입해 주셔서 감사합니다. %s 는 %s 일 후 부터 유료로 전환 됩니다.' v
FROM dual
)
SELECT SUBSTR(MAX(sys_connect_by_path(x, '$')), 3) v
FROM
(
SELECT v
, lv
, (lv - 1) || SUBSTR(v
, INSTR('%s'||v, '%s', 1, lv)
, INSTR(v||'%s', '%s', 1, lv)
- INSTR('%s'||v, '%s', 1, lv)
) x
FROM t
, (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 9)
WHERE lv <= LENGTH(v) - LENGTH(REPLACE(v, '%s', 'x')) + 1
)
START WITH lv = 1
CONNECT BY lv = lv - 1
;

by 아히고 [2012.01.10 17:02:01]
마농님 감사합니다. 덕분에 쉽게 처리했네요 정말 ㄳㄳ
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입