코딩변환 질문 드립니다.~ 0 6 621

by 켠서 [2019.08.07 18:34:47]


안녕하세요.

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 != '';
by 꼬랑지 [2019.08.08 08:57:29]

WHERE a.dth_ym = '' and a.DTH_CODE1 != '';

오라클에서 ''(빈문자열)은 NULL과 동일합니다. NULL값을 = != 로 비교하기에 결과가 안나오는 것입니다

IS NULL  또는 IS NOT NULL로 비교해야 합니다


by 꼬랑지 [2019.08.08 09:16:16]

MSSQL은 인포믹스처럼 ''를 NULL과 다르게 취급하고 있군요. 

이거 상당히 큰 문제인데 프로젝트 차원에서 ''를 어떻게 이행할지 전혀 논의가 없었나요?  

COLA
NULL
''
A

COLA에 위와같은 데이타가 있을때 COUNT(COLA)를 하면 MSSQL은 2가 나오고 오라클은 1이 나옵니다. 위 칼럼이 HAVING절에 쓰이고 있다면 조회결과가 달라지는 심각한 문제가 발생합니다.

또한 ORDER BY절에 사용될때도 ''를  NULL로 전환하느냐 어떤 다른 값으로 전환하느냐에 따라 정렬결과도 달라집니다.

이건 개발자 개인이 판단할 문제가 아니고 프로젝트 차원에서 '' 값이 있는 모든 테이블 조사하고 해당 칼럼을 사용하고 있는 모든 프로그램 까서 ''를 어떤 의미로 사용하고 있는지 파악해서

NULL로 전환할지 어떤 다른 문자값으로 전환할지 고객사와 결정해야 합니다. 

상당히 심각한 문제인데 PM,PL,DBA가 전혀 인지를 못하고 있다면 ...아미타불을 외칠 수밖에...


by 켠서 [2019.08.08 09:49:24]

IS NULL , IS NOT NULL 을 넣어보았는데 숫자형식 모델이 부적합하다고 하네여 ㅠㅠ;


by 마농 [2019.08.09 08:02:28]

오류 : to_char(STND_Y || '1231' ,23) AS death_date
수정 : STND_Y || '1231' AS death_date


by 켠서 [2019.08.12 14:34:31]

도움 감사드립니다. 그런데 마지막행이 좀 이상한거 같아요.. 아무 값도 안뜨는데 왜그럴까용?ㅠㅠ


by 마농 [2019.08.12 15:05:52]

자료가 안나오는건 조건이 안맞아서 그런거죠.
조건절 이리저리 바꿔가면서 자료 확인해 보세요.

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