안녕하세요,
oracle, mysql 에서는
select 1000.0 * -1 / 10 하면
결과가 -100 으로 나오는데
왜 SQL서버에서는 0 이 되는 걸까요?
MS 문서상에 보면 곱하기, 나누기가 음수(-) 연산자 보다
우선순위가 높고 동일 우선순위의 경우는 좌에서 우로 계산 된다고 하는데
마치 SQL 서버는 select 1000.0 * (-1 / 10) 와 같이 연산이 된 거 같은데
그 이유를 모르겠습니다.
아시는 분 답변 좀 부탁 드립니다.
Comment 1
-
엔더
2018.06.01 10:00
SELECT 1000.0 * -1 / 10 -> SELECT (1000.0) * (-1) / (10) -> SELECT A * B / C
위와 같기 때문에 교환법칙에 따라 어느 쪽을 먼저 연산하든 결과는 같겠지..
라고 생각하고 테스트를 해보니
(*SQL SERVER 2012 기준)
1. SELECT 1000.0 * (-1 / 10) >> 0.0
2. SELECT 1000.0 * -(1 / 10) >> 0.0
3. SELECT (1000.0 * -1) / 10 >> -100.000000
띠용..
적어도 3번의 경우는 아니군요.
이거저거 해보다보니 이 경우에는 잘 나오더라구요
SELECT CONVERT(FLOAT,1000.0) * CONVERT(FLOAT,-1) / CONVERT(FLOAT,10) >> -100
SELECT CONVERT(NUMERIC,1000.0) * CONVERT(NUMERIC,-1) / CONVERT(NUMERIC,10) >> -100.000000