형변환 차이 0 3 704

by 초보자 [Oracle Tuning] [2020.11.03 15:14:31]


where
    month between TO_CHAR(TO_NUMBER(SUBSTR('20200101',1,4))-1)||'00'
and 
   TO_CHAR(TO_NUMBER(SUBSTR('20200131',1,4))-1) || SUBSTR('20200131',5,2)





where
    month between (SUBSTR('20200101',1,4)-1)||'00'
and 
   (SUBSTR('20200131',1,4)-1) || SUBSTR('20200131',5,2)

 

안녕하십니까.

현제 오라클 사용중 입니다.

첫번째 쿼리는 제가 처음에 작성을 했던것이고, 이번에 다시 보니 굳이 TO_CHAR(TO_NUMBER())이런식으로 형변환을 많이 해줘야 하나 싶어서요.

시험 데이터 에서는 결과값은 올바르게 나왔으나

혹시 위에서 아래로 쿼리를 수정할경우 쿼리 결과값이 달라지거나 오류를 초래할수 있는 경우가 있을까해서 질문드립니다.

by 마농 [2020.11.03 16:01:50]

필요한 형식에 맞게 고쳐서 입력해 주는 것이 원칙입니다.
- 1 을 하려면 수치가 필요하므로 to_number 해 준 것이고
|| '00' 을 하려면 문자가 필요하므로 to_char 를 해 준 것이네요.
다만 필요한 곳에 필요한 형태가 안오더라도 자동 형변환이 발생됩니다.
즉 아래처럼 작성해도 자동 형변환에 의해 위에처럼 동작합니다.
자동 형변환에 문제가 없다면? 아래처럼 간결하게 작성해도 됩니다.
다만 실제로 문제가 없는지 확실하게 알고 사용해야 하겠습니다.
위의 예시의 경우엔 전혀 문제될게 없지만. 다른 경우에는 문제가 될 수도 있습니다.
특히나 날짜 타입의 형변환을 자동에 맡기면 오류가 날 가능성이 큽니다.
문자 컬럼에 숫자 조건을 주는 경우에도 문제가 발생합니다.


by 초보자 [2020.11.03 17:16:19]

위의 예시의 경우엔 전혀 문제될게 없지만. 다른 경우에는 문제가 될 수도 있습니다.

 

혹시 이부분에서 다른 경우를 말씀하시는 거는 제가 작성한 두 쿼리중 아래 쿼리를 말씀하신건가요?

제가 몇몇 데이터로 테스트 한 결과 두 쿼리는 잘 동작했습니다만, 혹시 아래 쿼리를 사용하기에는 오류가 나는 데이터를 예시로 알려주실수 있을까요??


by 마농 [2020.11.03 17:39:54]

질문에서처럼 1번 구분을 2번 구문으로 바꿔도 문제 없다고 답변 드린 것입니다.
문제가 될 수 있는 다른 경우는 답변 맨 아래 두줄 예로 들었습니다.

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