안녕하세요.
고수님들의 도움이 필요하여 문의드립니다.
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 )
이 부분도 추가를 해줘야 하는데요.
간단하게 처리할수 있는 방법이 없을까요?
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