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())이런식으로 형변환을 많이 해줘야 하나 싶어서요.
시험 데이터 에서는 결과값은 올바르게 나왔으나
혹시 위에서 아래로 쿼리를 수정할경우 쿼리 결과값이 달라지거나 오류를 초래할수 있는 경우가 있을까해서 질문드립니다.
필요한 형식에 맞게 고쳐서 입력해 주는 것이 원칙입니다.
- 1 을 하려면 수치가 필요하므로 to_number 해 준 것이고
|| '00' 을 하려면 문자가 필요하므로 to_char 를 해 준 것이네요.
다만 필요한 곳에 필요한 형태가 안오더라도 자동 형변환이 발생됩니다.
즉 아래처럼 작성해도 자동 형변환에 의해 위에처럼 동작합니다.
자동 형변환에 문제가 없다면? 아래처럼 간결하게 작성해도 됩니다.
다만 실제로 문제가 없는지 확실하게 알고 사용해야 하겠습니다.
위의 예시의 경우엔 전혀 문제될게 없지만. 다른 경우에는 문제가 될 수도 있습니다.
특히나 날짜 타입의 형변환을 자동에 맡기면 오류가 날 가능성이 큽니다.
문자 컬럼에 숫자 조건을 주는 경우에도 문제가 발생합니다.