안녕하세요.
ms sql 을 sql developer oracle 11g 으로 변환하는 작업을 하고있는데용,
날짜 없는경우 해당 년의 12월 31일로 death를 정의합니다.
해당 쿼리를 실행하였더니, 오류는 안뜨고 값이 생성이 안되더라구요
코딩 고수분들 도와주세요~
코딩내용은 다음과 같습니다.
SELECT a.person_id AS PERSON_ID, | |
to_char(STND_Y || '1231' ,23) AS death_date, | |
38003618 as death_type_concept_id, | |
b.concept_id as cause_concept_id, | |
dth_code1 as cause_source_value, | |
NULL as cause_source_concept_id | |
from | |
(select STND_Y, PERSON_ID, SEX, AGE_GROUP, DTH_YM, rtrim(dth_code1) as DTH_CODE1, DTH_CODE2, SIDO, SGG, IPSN_TYPE_CD, CTRB_PT_TYPE_CD, DFAB_GRD_CD, DFAB_PTN_CD, DFAB_REG_YM from cohort_cdm.NHID_JK) a | |
left join death_mapping b | |
on a.dth_code1=b.kcdcode | |
WHERE a.dth_ym = '' and a.DTH_CODE1 != ''; |
MSSQL은 인포믹스처럼 ''를 NULL과 다르게 취급하고 있군요.
이거 상당히 큰 문제인데 프로젝트 차원에서 ''를 어떻게 이행할지 전혀 논의가 없었나요?
COLA |
NULL |
'' |
A |
COLA에 위와같은 데이타가 있을때 COUNT(COLA)를 하면 MSSQL은 2가 나오고 오라클은 1이 나옵니다. 위 칼럼이 HAVING절에 쓰이고 있다면 조회결과가 달라지는 심각한 문제가 발생합니다.
또한 ORDER BY절에 사용될때도 ''를 NULL로 전환하느냐 어떤 다른 값으로 전환하느냐에 따라 정렬결과도 달라집니다.
이건 개발자 개인이 판단할 문제가 아니고 프로젝트 차원에서 '' 값이 있는 모든 테이블 조사하고 해당 칼럼을 사용하고 있는 모든 프로그램 까서 ''를 어떤 의미로 사용하고 있는지 파악해서
NULL로 전환할지 어떤 다른 문자값으로 전환할지 고객사와 결정해야 합니다.
상당히 심각한 문제인데 PM,PL,DBA가 전혀 인지를 못하고 있다면 ...아미타불을 외칠 수밖에...