SQL Server에 십진수 값을 저장하는 방법은 무엇입니까?


272

SQL Server에서 열의 10 진수 데이터 형식을 찾으려고합니다. 15.5, 26.9, 24.7, 9.8 등과 같은 값을 저장할 수 있어야합니다.

decimal(18, 0)열 데이터 형식에 할당 했지만이 값을 저장할 수 없습니다.

이것을하는 올바른 방법은 무엇입니까?

답변:


513

DECIMAL(18,0) 소수점 다음에 0 자리를 허용합니다.

DECIMAL(18,4)대신 잘해야하는 것과 같은 것을 사용하십시오 !

그러면 총 18 자리가 주어 지며 그 중 4는 소수점 뒤에 (소수점 앞에 14) 있습니다.


@marc_s, 열 데이터 유형이 10 ​​진수 (4,2) 인 경우 "4.5"값을 저장할 수 있습니까? 값을 삽입하면 "4.50"으로 수정됩니다.
Arun

1
@ArunkumarTK : decimal(4,2)소수점 앞 2 자리와 소수점 2 자리를 허용합니다. "4.5"는 아무 문제없이 저장 될 수 있습니다 – 그리고 숫자 적으로 "4.5"와 "4.50"은 동일합니다
marc_s

3
@ ArunkumarTK : 달라야합니까 ?? 값 - 모두 "4.5"가있는 동일한 .And NO 를 사용하지 않는 varchar소수 값을 저장!
marc_s

1
나는 이것이 오래된 토론이라는 것을 알고 있지만 그 경우 @ArunkumarTK에서는 '4.05'와 '4.5'가 아닙니다.
Shelby115

2
예, 18과 19가 모두 9 바이트를 사용할 때 18이 왜 그렇게 인기가 있습니까 (예 : 기본값 (18,0)) ?
xr280xr

136

다음과 같이 사용해야합니다.

DECIMAL(m,a)

m 소수점 이하 자릿수의 총 자릿수입니다.

a 소수점 이하로 가질 수있는 최대 자릿수입니다.

http://www.tsqltutorials.com/datatypes.php 에는 모든 데이터 유형에 대한 설명이 있습니다.


3
일반적으로 DECIMAL (p, s)로 표시됩니다. 여기서 p는 정밀도 (숫자에서 최대 허용 자릿수)를 나타내고 s는 스케일 (소수점 다음 최대 허용 자릿수)을 나타냅니다.
RBT

링크는 죽었다
이브라힘 마흐 리르

43

설정 값 Decimal은 정밀도와 스케일 또는 일반 언어, 숫자의 자릿수 및 소수점 오른쪽에 몇 자릿수를 설정해야하는지 설정합니다.

당신이 넣어 경우 PIDecimal(18,0) 그것을 하면 그것은로 기록됩니다 3?

당신이 넣어 PIDecimal(18,2)그것은으로 기록 될 것입니다 3.14?

에 넣으면 PIDecimal(18,10)기록됩니다 3.1415926535.


35

대부분의 경우 SQL 10 진수 형식에서 최소 저장 공간 (5 바이트)을 사용하는 decimal (9,2)를 사용합니다.


정밀도 => 저장 바이트

  • 1-9 => 5
  • 10-19 => 9
  • 20-28 => 13
  • 29-38 => 17

0에서 9,999,999.99 (앞쪽 7 자리 + 소수점 뒤 2 자리 = 총 9 자리)까지 저장할 수 있으며 대부분의 값에 충분합니다.


9

당신은 이것을 시도 할 수 있습니다

decimal(18,1)

숫자의 길이는 완전히 18이어야합니다. 소수점 뒤의 숫자 길이는 1이어야하며 그 이하이어야합니다.


6

MySQL DB decimal(4,2)에서는 총 4 자리 숫자 만 입력 할 수 있습니다. 에서 볼 수 있듯이 decimal(4,2)소수점 이하로 유지하기 위해 두 자리 숫자 중 총 4 자리를 입력 할 수 있음을 의미합니다.

따라서 MySQL 데이터베이스에 100.0을 입력하면 "Out of Range Value for column"과 같은 오류가 표시됩니다.

따라서 00.00에서 99.99 사이의 범위 만 입력 할 수 있습니다.


2
질문이 Microsoft SQL Server를 명확하게 지정하는 동안 왜 관련이 있습니까?
JCKödel

3

다른 대답은 옳습니다. 당신의 예제가 당신이 원하는 모든 가능성을 반영한다고 가정하자 DECIMAL(3, 1). 또는 DECIMAL(14, 1)총 14 자리를 허용합니다. 충분한 것을 생각하는 것은 당신의 일입니다.


1
request.input("name", sql.Decimal, 155.33)              // decimal(18, 0)
request.input("name", sql.Decimal(10), 155.33)          // decimal(10, 0)
request.input("name", sql.Decimal(10, 2), 155.33)       // decimal(10, 2)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.