특정문자의 제거방법 0 5 1,026

by 실베 [2020.04.24 11:17:26]


안녕하세요

 

Q-P-D-01-01-1-000-000001 이라는 데이터를  QPD01011-000-00001    이런식으로 변경하려고하는데요.

 

update table
set doc_no=SUBSTR(doc_no,0,1)||SUBSTR(doc_no,3,1)||SUBSTR(doc_no,5,1)||SUBSTR(doc_no,7,2)||SUBSTR(doc_no,10,2)||SUBSTR(doc_no,13)

 

이렇게 처리를 하긴햇으나.. 예를들어 해당쿼리가 2번돌거나 하면 데이터가 비정상적으로 변경되며 변경전데이터가 변경후 데이터가 함께있을때 사용이 불가능한 문제가 있죠..

 

- 의 특수문자를 5개만 제거하는 방식으로 쿼리할수 있는 방법이 어떻게 될가요?

 

by 샤랄라 [2020.04.24 11:36:28]

데이터의 규칙이 어떻게 되는지 알려주셔야 해요~


by 실베 [2020.04.24 11:42:13]

Q-P-D-01-01-1-000-000001

 

데이터의 규칙과 형식은 위와 같습니다...


by 실베 [2020.04.24 11:42:58]

1CHAR-1CHAR-1CHAR-2CHAR-2CHAR-1CHAR-3CHAR-6CHAR


by 신이만든지기 [2020.04.24 11:48:53]
WITH
    T AS
        (SELECT 'Q-P-D-01-01-1-000-000001' TXT FROM DUAL
         UNION ALL
         SELECT 'QPD01011-000-000001' TXT FROM DUAL)
SELECT TXT
     , SUBSTR(REPLACE(TXT, '-', ''), 1, 7) TXT2
     , SUBSTR(TXT, -11) TXT3
     , SUBSTR(REPLACE(TXT, '-', ''), 1, 7) || SUBSTR(TXT, -11) RESULT
  FROM T

 


by 마농 [2020.04.24 12:44:15]

조건절이 없어서 그렇죠
- 변경 전 : 전체 갱신
- 변경 후 : 변경 대상만 찾아 갱신하도록 조건 추가
WHERE doc_no LIKE '_-_-_-__-__-%'
WHERE LENGTH(doc_no) = 24

-- 1. 갱신전 확인 쿼리
SELECT doc_no
     , REPLACE(SUBSTR(doc_no, 1, 13), '-') || SUBSTR(doc_no, 14) x
  FROM t
 WHERE LENGTH(doc_no) = 24
;
-- 2. 갱신용 쿼리
UPDATE t
   SET doc_no
     = REPLACE(SUBSTR(doc_no, 1, 13), '-') || SUBSTR(doc_no, 14)
 WHERE LENGTH(doc_no) = 24
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입