다음을 통해 공유


전체 자릿수, 소수 자릿수 및 길이(Transact-SQL)

전체 자릿수는 숫자의 모든 자릿수이고 소수 자릿수는 숫자에서 소수점 오른쪽에 있는 자릿수입니다. 예를 들어 123.45의 전체 자릿수는 5이고 소수 자릿수는 2입니다.

SQL Server에서 numeric 및 decimal 데이터 형식의 기본 최대 전체 자릿수는 38입니다. 이전 버전의 SQL Server에서 기본 최대 전체 자릿수는 28입니다.

숫자 데이터 형식의 길이는 해당 숫자를 저장하는 데 사용된 바이트 수이고 문자열이나 유니코드 데이터 형식의 길이는 문자의 개수입니다. binary, varbinary 및 image 데이터 형식의 길이는 바이트 수입니다. 예를 들어 int 데이터 형식은 10자리까지 지정할 수 있고 4바이트로 저장되며 소수점은 허용되지 않습니다. int 데이터 형식의 전체 자릿수는 10이고 길이는 4, 소수 자릿수는 0입니다.

두 개의 char, varchar, binary 또는 varbinary 식을 연결하면 결과 식의 길이는 두 원본 식의 길이의 합과 8,000자 중 작은 쪽의 값이 됩니다.

두 개의 nchar 또는 nvarchar 식을 연결하면 결과 식의 길이는 두 원본 식의 길이의 합과 4,000자 중 작은 쪽의 값이 됩니다.

데이터 형식은 같지만 길이가 다른 두 식을 UNION, EXCEPT 또는 INTERSECT를 사용하여 비교하면 결과 길이는 두 식의 최대 길이가 됩니다.

decimal을 제외한 숫자 데이터 형식의 전체 자릿수와 소수 자릿수는 고정되어 있습니다. 데이터 형식이 동일한 두 식을 산술 연산자로 결합하면 결과는 해당 형식에 정의된 전체 자릿수와 소수 자릿수를 가진 동일한 데이터 형식이 됩니다. 다른 숫자 데이터 형식을 가진 두 식을 연산자로 결합하면 데이터 형식 우선 순위에 따라 결과의 데이터 형식이 정의됩니다. 결과는 해당 데이터 형식에 대해 정의된 전체 자릿수와 소수 자릿수를 갖습니다.

다음 표에서는 연산의 결과가 decimal 형식일 경우 결과의 전체 자릿수와 소수 자릿수를 계산하는 방법을 정의합니다. 다음 중 하나에 해당할 경우 결과는 decimal입니다.

  • 두 가지 식이 모두 decimal일 경우

  • 한 식이 decimal이고 다른 식이 decimal보다 선행 규칙이 낮은 데이터 형식일 경우

피연산자 식은 전체 자릿수 p1과 소수 자릿수 s1을 가진 식 e1, 전체 자릿수 p2와 소수 자릿수 s2를 가진 식 e2로 표시합니다. decimal이 아닌 모든 식의 전체 자릿수와 소수 자릿수는 해당 식의 데이터 형식에 대해 정의된 전체 자릿수와 소수 자릿수입니다.

연산

결과 전체 자릿수

결과 소수 자릿수 *

e1 + e2

max(s1, s2) + max(p1-s1, p2-s2) + 1

max(s1, s2)

e1 - e2

max(s1, s2) + max(p1-s1, p2-s2) + 1

max(s1, s2)

e1 * e2

p1 + p2 + 1

s1 + s2

e1 / e2

p1 - s1 + s2 + max(6, s1 + p2 + 1)

max(6, s1 + p2 + 1)

e1 { UNION | EXCEPT | INTERSECT } e2

max(s1, s2) + max(p1-s1, p2-s2)

max(s1, s2)

e1 % e2

min(p1-s1, p2 -s2) + max( s1,s2 )

max(s1, s2)

* 결과 전체 자릿수와 소수 자릿수의 최대값은 38입니다. 결과 전체 자릿수가 38보다 크면 결과의 정수 부분이 잘리지 않도록 해당 소수 자릿수가 줄어듭니다.