답변 감사 드립니다.
그런데 제가 드리는 질문은 연산자 우선순위가 select (1000.0 * -1) / 10 가 아닌
왜 select 1000.0 * (-1 / 10) 로 처리 되었는가 하는 것 입니다.
곱하기와 나누기는 동일한 연산순위를 가지므로 왼쪽에서 오른쪽으로 계산 되어야 하는것 아닌지요?
@kimho
1000.0 * -1 / 10 가
① 1000.0 * -1 => - 10000.0
② - 10000.0 / 10 => -100.0
이렇게 되어야 하는데,
① -1 / 10 => 0
② 1000.0 * 0 => 0
와 같이 계산이 되고 있습니다.
왜 괄호 연산을 하지 않았는데 나눗셈이 먼저 되었는지가 궁금 한 것입니다.
@kimho
kimho님께서 무슨 말씀 하시는 지는 잘 알겠습니다.
그런데 제 질문의 요지는 그게 아니라 왜 연산자 우선순위가 위에 질문 드린것 처럼 동작하지 않느냐 입니다(좌에서 우로).
그리고 이해를 쉽게 하기 위해 상수를 사용 했지만, 실제로는 정수형 데이터 타입의 컬럼을 사용 하는 것이며
컬럼 타입의 변경도 불가능 합니다 (물론 강제로 convert 하면 되겠지만 말씀 드린 것 처럼 질문의 요지가 그것이 아닙니다).
Oracle, MySQL은 똑같은 환경에서 좌 -> 우 순서로 연산이 되는데, 왜 SQL서버는 우 -> 좌로 연산이 되었냐하는 질문입니다.
감사합니다.
MS SQL에서는 Integer끼리 나눈 결과가 0보다 작으면 무조건 0을 반환하고, 0보다 크면 무조건 소수점 뒷자리를 잘라서 Integer로 반환합니다.
즉, 다음과 같이 쿼리를 실행해도 무조건 0이 반환됩니다.
또한 다음과 같이 실행하면 소수점 뒷자리를 잘라서 1이 반환됩니다.
따라서 원하시는 결과를 얻으시려면 다음과 같이 float 타입이 들어간 상태에서 나누도록 해주시면 됩니다.
즉, Integer끼리만 나누지 않도록 해주시면 됩니다.
그럼 답변이 되셨길 바라며 또 궁금한 사항이 있으시면 언제든지 질문 남겨주시기 바랍니다.
감사합니다.