프리랜서/CDW

adenocarcinoma 는 제외하고 carcinoma 만 추출하기

멋쟁이천재사자 2022. 7. 28. 14:15

1. 용어 이해

 

"carcinoma"는 상피조직에서 발생하는 암종을 이야기하며, "adenocarcinoma"는 점액 소화액과 같은 물질을 생성하는 샘(gland)에서 기원한 악성종양을 의미합니다.

 

대장암의 경우 대장과 직장에 점액을 분비하고 수분을 흡수하는 수많은 샘이 있기 때문에 압도적으로 샘암종(adenocarcinoma)이 많이 발생합니다.

암보험에서는 조직 검사지에 "carcinoma" 라고 기재되어 있다면, 암 진단비를 검토하여야 합니다.

 

2. 조직 검사지

 

조직 검사지에 다음과 같은 데이터가 있다고 가정해보겠습니다.

CASENO  STR
1 tubular adenocarcinoma, moderately differentiated
2 Histologic type; poorly cohesive carcinoma


SQL 로는 다음과 같은 방식으로 재현해볼 수 있습니다.

 

select  1 as caseno, 'tubular adenocarcinoma, moderately differentiated' as str from dual union all
select  2 as caseno, 'Histologic type; poorly cohesive carcinoma' as str from dual


3. carcinoma 추출 오류

여기에서 carcinoma 인 경우를 추출하려고 무심코 sql 을 작성하다보면, adenocarcinoma 에도 carcinoma가 포함되어 있어서 함께 추출이 되어버립니다.

4. carcinoma 만 추출하는 가장 효율적인 방법은 무엇일까요?

다양한 방법이 있을 수 있겠지만, 

가장 확실하고 손쉬운 방법은 adenocarcinoma 를 제거(STEP1)한 다음 해당 문자열에서 carcinoma 를 추출(CANCER_TYPE)하는 것입니다.

 

select caseno, str,
 regexp_substr(str,'carcinoma',1,1,'i') as cancer_type_x,        -- 잘못된 방법
 regexp_replace(str,'adenocarcinoma','') as step1,             -- adenocarcinoma 제거
 regexp_substr(regexp_replace(str,'adenocarcinoma',''),'carcinoma',1,1,'i') as cancer_type
from (
select  1 as caseno, 'tubular adenocarcinoma, moderately differentiated' as str from dual union all
select  2 as caseno, 'Histologic type; poorly cohesive carcinoma' as str from dual
)



CASENO STR  CANCER_TYPE_X  STEP1  CANCER_TYPE
1 tubular adenocarcinoma, moderately differentiated carcinoma  tubular , moderately differentiated  
2 Histologic type; poorly cohesive carcinoma carcinoma  Histologic type; poorly cohesive carcinoma carcinoma carcinoma