SQL Server가 데이터 유형 숫자로 변환하는 산술 오버플로 오류를 발생시키는 이유는 무엇입니까?
다음 코드를 실행할 때 SQL Server Management Studio에서 오류가 발생했습니다.
declare @percentage numeric(3,2)
set @percentage = cast(15 as numeric(3,2))
하지만 숫자 선언을 바꿀 때는
declare @percentage numeric(4,2)
set @percentage = cast(15 as numeric(4,2))
만사가 순조롭습니다
숫자 데이터 유형에 제한이 있습니까?
숫자는 총 자릿수를 정의한 다음 소수 뒤에 오는 숫자를 정의합니다.
숫자(3,2)는 최대 9.99까지 유지할 수 있습니다.
숫자(3,2)를 보겠습니다.즉, 데이터를 저장할 수 있는 자리가 세 개이고 그 중 두 개는 소수점 오른쪽에 있고 나머지 한 개는 소수점 왼쪽에 있습니다.15는 소수점 왼쪽에 두 자리가 있습니다.BTW 만약 당신이 100을 값으로 가질 수 있다면 나는 그것을 숫자 (5, 2)로 늘릴 것입니다.
NUMERIC(3,2)
평균: 소수점 다음에 두 자리, 총 세 자리입니다.따라서 소수점 앞에는 소수점이 하나만 있습니다.
해라NUMERIC(5,2)
소수점 앞에 세 개, 뒤에 두 개.
정밀도와 척도는 종종 오해를 받습니다.숫자(3,2)에서는 전체적으로 3자리를 원하지만 소수점 오른쪽에는 2자리를 원합니다.15 => 15.00을 원할 경우 선행 1이 오버플로를 유발합니다(소수점 오른쪽에 2자리를 원할 경우 왼쪽에 한 자리만 더 사용할 수 있습니다).4,2의 경우 4자리 숫자가 모두 맞기 때문에 문제가 없습니다.
꽤 오래된 질문이지만 완성을 위해 여기에 추가해야겠다고 생각했습니다.쿼리에 영향을 주고 이 오류를 발생시킬 수 있는 SQL Server 데이터베이스 설정이 있습니다.
SET NUMERIC_ROUNDABORT { ON | OFF }
이 값을 ON으로 설정하면 결과가 결과 데이터 유형에 맞지 않는 경우 이 오류가 발생합니다.
예를 들어, 이 설정을 ON으로 설정하고 실행 중인 경우
SELECT cast(0.0 / 1 AS NUMERIC(4,2))
이 오류를 발생시킵니다.
추가 정보: https://learn.microsoft.com/en-us/sql/t-sql/statements/set-numeric-roundabort-transact-sql
설정하는 다른 방법:
언급URL : https://stackoverflow.com/questions/2059134/why-sql-server-throws-arithmetic-overflow-error-converting-int-to-data-type-nume
'programing' 카테고리의 다른 글
타이프스크립트를 사용하여 특정 길이의 문자열을 선언하려면 어떻게 해야 합니까? (0) | 2023.07.06 |
---|---|
수업을 어떻게 꾸밀까요? (0) | 2023.07.06 |
Git(숫자 및 크기)의 파일 제한은 무엇입니까? (0) | 2023.07.06 |
Oracle SQL - REGEXP_LIKE에 a-z 또는 A-Z 이외의 문자가 포함되어 있습니다. (0) | 2023.07.06 |
우체부가 있는 FCM - 요청에 인증 키(FCM 토큰)가 누락되었습니다. (0) | 2023.07.06 |