SQL Server에서 이상한 작업 문제가 발생했습니다. -100/-100*10 = 0
- 실행되면 됩니다.
SELECT -100/-100*10
결과는 입니다.0
. - 실행되면 됩니다.
SELECT (-100/-100)*10
결과는 입니다.10
. - 실행되면 됩니다.
SELECT -100/(-100*10)
결과는 입니다.0
. - 실행되면 됩니다.
SELECT 100/100*10
결과는 입니다.10
.
BOL 상태는 다음과 같습니다.
식에서 두 연산자의 우선 순위 수준이 동일하면 식에서 해당 위치에 따라 왼쪽에서 오른쪽으로 평가됩니다.
그리고.
Level Operators
1 ~ (Bitwise NOT)
2 * (Multiplication), / (Division), % (Modulus)
3 + (Positive), - (Negative), + (Addition), + (Concatenation), - (Subtraction), & (Bitwise AND), ^ (Bitwise Exclusive OR), | (Bitwise OR)
수배가 잘못된 건가요, 아니면 제가 뭔가를 놓친 건가요?그런 것 같아요.-
(예상된) 우선순위를 벗어 던지고 있습니다.
우선 순위 표에 따르면, 이것은 예상된 동작입니다.우선 순위가 높은 연산자입니다(/
그리고.*
)는 우선 순위가 낮은 연산자(단일)보다 먼저 평가됩니다.-
) 그럼 이렇게 됩니다.
-100 / -100 * 10
는 다음과 같이 평가됩니다.
-(100 / -(100 * 10))
이 동작은 VB, JavaScript와 같이 단항 부정의 우선순위가 곱셈 및 나눗셈보다 높은 대부분의 프로그래밍 언어와는 다릅니다.
BOL이 정확합니다. -
보다 우선 순위가 낮습니다.*
,그렇게
-A * B
으로 구문 분석됩니다.
-(A * B)
곱셈은 동일한 우선순위의 다른 두 이진 연산자를 혼합하는 경우를 제외하고는 일반적으로 이 점을 인식하지 못합니다./
그리고.%
(그리고요.%
이러한 복합 표현에는 거의 사용되지 않습니다.)그렇게
C / -A * B
다음과 같이 구문 분석됩니다.
C / -(A * B)
결과를 설명해 주세요.대부분의 다른 언어에서 단항 마이너스(unariary-negrative)가 다음 언어보다 우선하기 때문에 이는 직관에 반합니다.*
그리고./
하지만 T-SQL에는 없으며, 이 내용은 올바르게 문서화되어 있습니다.
좋은(?) 방법으로 설명할 수 있습니다.
SELECT -1073741824 * 2
산술 오버플로를 생성합니다.-(1073741824 * 2)
생산합니다2147483648
중간 매개체로써, 이 매개체는 맞지 않습니다.INT
,그렇지만
SELECT (-1073741824) * 2
예상된 결과를 생성합니다.-2147483648
그렇다는 거죠
문서에서 (아마도 직관에 반하는) 우선 순서는 다음과 같습니다.- (Negative)
세 번째입니다.
따라서 다음과 같은 이점을 얻을 수 있습니다.
-(100/-(100*10)) = 0
변수를 변수에 배치하면 곱셈 후에는 단항 연산이 발생하지 않으므로 이러한 현상이 발생하지 않습니다.
따라서 여기서 A와 B는 동일한 반면 C, D, E는 현재 표시된 결과를 보여줍니다(E는 완전한 괄호를 사용).
DECLARE @i1 int, @i2 int, @i3 int;
SELECT @i1 = -100,
@i2 = -100,
@i3 = 10;
SELECT @i1/@i2*@i3 [A],
-100/(-100)*10 [B],
-100/-100*10 [C],
-100/-(100*10) [D],
-(100/-(100*10)) [E];
A - 10
B - 10
C - 0
D - 0
E - 0
언급URL : https://stackoverflow.com/questions/54513450/a-strange-operation-problem-in-sql-server-100-10010-0 입니다.
'programing' 카테고리의 다른 글
리눅스 디렉터리의 파일을 반복적으로 계산합니다. (0) | 2023.04.25 |
---|---|
마이크로소프트는 어떻습니까?확장입니다.전체 .net 프레임워크에 대해 로깅 작업을 수행하시겠습니까? (0) | 2023.04.25 |
목록을 python에서 numpy 배열로 저장하는 방법은 무엇입니까? (0) | 2023.04.25 |
mingw-w64 스레드: posix vs win32입니다. (0) | 2023.04.25 |
PowerShell에서 Tab 문자를 입력하는 방법은 무엇입니까? (0) | 2023.04.25 |