orcle 문자열 치환하려는데 특정문자를 여러 개 설정할수있는 방법 질문드려요 0 5 1,951

by 밀크캬라멜 [2015.04.08 16:56:28]


 

안녕하세요

문자열에서 특정문자를 지워야 하는 일이 생겨서요ㅜㅜ

데이터 문자열 구조는 대충 XXXX@XXXX@XXXX 이런식으로 되어있습니다

X에는 숫자가 들어가구요 @에는 공백, 그러니까 아무것도 없이 '' 이렇게도 등록되고요

'-','~' 등등 구분자가 들어가게 됩니다

구분자가 꼭 들어가면 substr으로 자르면 될텐데 구분자 없이 ''으로 등록된 것도 있어서 

replace로 치환해서 자르려고 하거든요..ㅜㅜ 

근데 replace는 한가지의 특정문자만 설정할 수 있고, 게다가 제가 설정하는 구분자가 1개가 될 수도, 여러 개가 될 수도 있어서 유동적인걸 원하는데 안되려나요..ㅠㅠ

replace말고 다른 방법이나, 아니면 replace를 효과적으로 사용할수 있는 법 질문드려용

 

 

by 개발뉴비 [2015.04.08 17:06:44]
WITH T (STR) AS (
    SELECT '123 456-,789.;012' FROM DUAL UNION ALL
    SELECT '987\654,321/098' FROM DUAL
)
SELECT REGEXP_REPLACE(STR, '[^0-9]+', '') FROM T

 


by 개발뉴비 [2015.04.08 17:22:01]
-- 제가 잘못 이해했었네요...
-- 숫자의 자리수가 일정하다면 이렇게 잘라도 될 것 같아요
WITH T (STR) AS (
    SELECT '123 456-,789.;012' FROM DUAL UNION ALL
    SELECT '987\654,321/098' FROM DUAL
)
SELECT SUBSTR(AA.TXT, 1, 3) SUB1
     , SUBSTR(AA.TXT, 4, 3) SUB2
     , SUBSTR(AA.TXT, 7, 3) SUB3
     , SUBSTR(AA.TXT, 10, 3) SUB4
FROM (SELECT REGEXP_REPLACE(STR, '[^0-9]+', '') TXT FROM T) AA

by 밀크캬라멜 [2015.04.08 17:23:15]

감사합니다! 제가 원했던건 위답변의 쿼리였어요 ㅎㅎㅎㅎㅎ REGEXP_REPLACE이게 있는지 몰랐네요!! 감사합니다 저거 사용해서 해결했어요 ㅎㅎㅎㅎ!


by rain748 [2015.04.08 17:17:55]

select regexp_substr(txt,'[^-]+',1,1)
      ,regexp_substr(txt,'[^-]+',1,2)
      ,regexp_substr(txt,'[^-]+',1,3)
from (
      SELECT REGEXP_REPLACE(txt, '[^0-9]+', '-') txt
      FROM T)


by 창조의날개 [2015.04.09 09:16:18]
-- 개발뉴비님  WITH 도용합니다..

WITH T (STR) AS (
    SELECT '123 456-,789.;012' FROM DUAL UNION ALL
    SELECT '987\654,321/098' FROM DUAL
)
SELECT regexp_substr(STR, '[0-9]+',1,1) A1
     , regexp_substr(STR, '[0-9]+',1,2) A2
     , regexp_substr(STR, '[0-9]+',1,3) A3
     , regexp_substr(STR, '[0-9]+',1,4) A4
FROM T
;

 

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