strQry = '

UPDATE "CL_COMPANY"

SET "CO_ADDR1" = RegExp_Replace("CO_ADDR1", \'^(.*?)(특별시|광역시|특별자치시|특별자치도|시|도)\', \'\1\')

, "CO_ADDR" = RegExp_Replace("CO_ADDR" , \'^(.*?)(특별시|광역시|특별자치시|특별자치도|시|도)\', \'\1\')

WHERE "CO_PK" = :coPk:

';

"CO_ADDR"가 경기 남양주시 진접읍 광릉내로 60인 경우

띄어쓰기로 구분해서 첫번째 문자열만 정규표현식이 적용되게 수정해 줘




제시해주신 쿼리는 주소 전체에서 패턴을 찾으려 하기 때문에 의도치 않은 부분까지 치환될 위험이 있습니다.

주소 문자열을 공백(Space) 기준으로 잘라 첫 번째 단어만 정규식으로 가공한 뒤, 다시 나머지 주소와 합치는 방식의 SQL 문법으로 수정해 드립니다. (PostgreSQL 환경을 기준으로 작성되었습니다.)


UPDATE "CL_COMPANY"
SET 
   -- 1. Split_Part로 첫 단어만 추출
   -- 2. 추출된 단어에서 행정구역 명칭 제거
   -- 3. 나머지 주소와 다시 결합 (선택 사항에 따라 조절)
   "CO_ADDR1" = RegExp_Replace(Split_Part("CO_ADDR1", ' ', 1), '(특별시|광역시|특별자치시|특별자치도|시|도)$', ''),
   
   "CO_ADDR"  = RegExp_Replace(Split_Part("CO_ADDR", ' ', 1), '(특별시|광역시|특별자치시|특별자치도|시|도)$', '') 
                || Substring("CO_ADDR" FROM ' .*') -- 첫 단어 이후의 나머지 주소를 다시 붙임
WHERE "CO_PK" = :coPk:;



주요 수정 및 개선 사항

  1. Split_Part("컬럼", ' ', 1) 사용:
    • 공백을 기준으로 문자열을 나누고 그중 첫 번째(1) 문자열(예: "경기도", "경기")만 가져옵니다.
    • 이렇게 하면 "진접읍"이나 "남양주시"처럼 뒤에 나오는 단어들이 정규식에 걸려 파손되는 것을 원천 봉쇄할 수 있습니다.
  2. 정규식 패턴 수정 ($):
    • 패턴 뒤에 $를 붙여 단어의 끝에 해당 명칭이 올 때만 치환하도록 제한했습니다.
    • 이 처리를 하지 않으면 "시흥시" 같은 경우 앞의 "시"가 지워질 수 있는데, 이를 방지해줍니다.
  3. 결합 연산자 (||):
    • CO_ADDR의 경우 첫 단어만 바꾸고 나머지 상세 주소는 보존해야 하므로, Substring을 이용해 첫 공백 이후의 문자열을 다시 붙여주었습니다.
    •