REPLACE 관련 문의 0 2 846

by InsideCore [SQL Query] [2018.07.18 17:44:51]


안녕하세요.

고수님들의 도움이 필요하여 문의드립니다.

DB : Oracle Database 11g

 

WITH T AS(
            SELECT '180609AA'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609BB'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609CC'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609DD'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609FF'    NAME
              FROM DUAL
         UNION ALL
            SELECT '0609GG'    NAME
              FROM DUAL
         )

 SELECT NAME
   FROM T
  WHERE LENGTH(NAME) >= 6
    AND (LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(NAME,'_'),'AA',''),'BB',''),'CC',''),'DD',''),'FF',''),'GG','')) = 6 )

위의 SQL에서

NAME 코드가 신규로 생성이 되는데요.

지금은 예를들어 ,

NAME의 숫자 다음에 'AA','BB','CC','DD','FF','GG'만 존재하나

계속 추가가 발생합니다.

 

이로 인해

AND (LENGTH(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(NAME,'_'),'AA',''),'BB',''),'CC',''),'DD',''),'FF',''),'GG','')) = 6 )

이 부분도 추가를 해줘야 하는데요.

 

간단하게 처리할수 있는 방법이 없을까요?

by 우리집아찌 [2018.07.18 17:49:27]
WITH T AS(
            SELECT '180609AA'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609BB'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609CC'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609DD'    NAME
              FROM DUAL
         UNION ALL
            SELECT '180609FF'    NAME
              FROM DUAL
         UNION ALL
            SELECT '0609GG'    NAME
              FROM DUAL
         )

 SELECT NAME
   FROM T
  WHERE LENGTH(REGEXP_REPLACE(NAME,'[^0-9]',''))>= 6

 


by 마농 [2018.07.18 17:59:17]
SELECT name
  FROM t
 WHERE REGEXP_LIKE(name, '^[0-9]{6}[A-Z]{2}$')
;

 

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