글자중 일부 글자 제외 기능 0 8 835

by MS [SQL Query] [2022.04.07 15:42:29]


조건:

1. [Central]의 글자는 바뀔수 있습니다..

2. INTERIOR_COLOR등의 값도 매번 변화 됩니다.

[ ] 안에 정의된 값과 = 이전에 정의된 값도 실제 사용시 불필요해서 지우고 싶습니다.

검토 감사합니다.

 

입력정보

select '[Central]INTERIOR_COLOR != BASE_COLOR' pval from dual
union all
select '[Central]INTERIOR_COLOR = DARK_GRAY & ([Central]NATIONAL_CODE = EURO | [Central]NATIONAL_CODE = UK)' from dual
union all
select '[Central]EXTERIOR_COLOR = ELITE GREY' from dual
union all
select '[Central]VIN = VIN_001 | [Central]VIN = VIN_002' from dual
;

결과물

pval 속성

!BASE_COLOR
DARK_GRAY & (EURO | UK)
ELITE GREY
VIN_001 | VIN_002

by 동동동 [2022.04.07 16:19:54]
WITH TMP1 AS (
select '[Central]INTERIOR_COLOR != BASE_COLOR' pval from dual
union all
select '[Central]INTERIOR_COLOR = DARK_GRAY & ([Central]NATIONAL_CODE = EURO | [Central]NATIONAL_CODE = UK)' from dual
union all
select '[Central]EXTERIOR_COLOR = ELITE GREY' from dual
union all
select '[Central]VIN = VIN_001 | [Central]VIN = VIN_002' from dual
)
SELECT A.* 
     , REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(pval, '\[Central\]INTERIOR_COLOR|\[Central\]NATIONAL_CODE|\[Central\]EXTERIOR_COLOR|\[Central\]VIN', '')
                                    , '!=', '!')
                     , '=| ', '') TXT
  FROM TMP1 A
;

 

치환으로 해봤습니다..

 


by pajama [2022.04.08 08:32:49]

어설프긴 한데...찾아보고 만들어봤습니다~

with t as (
select '[Central]INTERIOR_COLOR != BASE_COLOR' pval from dual union all
select '[Central]INTERIOR_COLOR = DARK_GRAY & ([Central]NATIONAL_CODE = EURO | [Central]NATIONAL_CODE = UK)' from dual union all
select '[Central]EXTERIOR_COLOR = ELITE GREY' from dual union all
select '[Central]VIN = VIN_001 | [Central]VIN = VIN_002' from dual
)
select replace(regexp_replace(pval,'\[[A-Za-z]+\][A-Z_]+ ',''),'= ','') from t

 


by 마농 [2022.04.08 12:39:56]
SELECT pval
     , REPLACE(REGEXP_REPLACE(pval, '[[][^!=]+'), '= ') x
  FROM t
;

 


by 동동동 [2022.04.08 13:25:13]

마농님 정규표현식 '[[][^!=]+' 해석 좀 가능 하실가요?

[ ] => [ ]에 있는 문자 중 하나를 일치

[^] => [ ]에 있는 문자를 제외한 모든 문자를 일치

+ => 하나 이상 일치

이렇게 정의된걸로 해석해 보면...

1. [[] => [ : 대괄호가 있고..

2. [^!=] => !, = 가 제외이고..

3. + => [[][^!=] 이게 하나이상 일치..??

...@.@ 아...해석이 안되네요..ㅠㅠ

 


by 마농 [2022.04.08 14:25:20]

대괄호 다음에 느낌표나 등호가 아닌 문자가 여러개 연결되어 오는 문자
다르게 말하면 대괄호부터 느낌표나 등호 이전까지 문자.
예시에서는 "[Central]INTERIOR_COLOR " 이부분이 되겠네요.


by 동동동 [2022.04.11 09:15:15]

마농님 답변 감사드립니다..

인터넷에 예시로 나온 표현식을 보고 있는데...

대괄호는 반복을 의미하고..^는 제외를 의미하고..그런데 조합되면 이렇게 된다 라고..해석이 안되네요..ㅠㅠ

정규표현식은 어렵네요....ㅠㅠ

 

답글 감사드립니다...^^

 


by 마농 [2022.04.11 09:33:57]

대괄호는 문자 패턴을 지정하는 부분입니다. (반복 의미 아님)
반복은 + 입니다.
^ 은 대괄호 안에서는 제외를 의미하고, 대괄호 없이는 문자열의  시작부분을 의미합니다.
대괄호 자체를 정규식의 의미가 아닌 일반 대괄호로 인식시키기 위해 대괄호 안에 넣었습니다. [[]
일반문자로 인식시기기 위한 다른 방법으로는 \ 문자를 붙이는 방법도 있습니다. \[
[[] : 대괄호시작
[^!=] : 느낌표나 등호가 아닌 문자
[^!=]+ : 느낌표나 등호가 아닌 문자의 반복(1개 이상 반복)
[[][^!=]+ : 대괄호시작 부터 느낌표나 등호가 아닌 문자의 반복


by 동동동 [2022.04.11 17:22:42]

정말 감사드립니다...ㅠㅠ

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