문제

SQL Server에 백분율을 나타내는 값을 저장하고 싶습니다. 어떤 데이터 유형을 선호해야 합니까?

도움이 되었습니까?

해결책

십진수 (p, s) 및 숫자 (p, s)

p (정밀) :

저장 될 최대 소수점 자릿수 (소수점의 왼쪽과 오른쪽 모두)


S (scale) :

소수점의 오른쪽에 저장 될 소수 자릿수의 수 (-> s는 소수점 이하 자리의 수를 정의합니다)


0 <= s <= p.

  • P ... 총 숫자 수
  • S ... 소수점 오른쪽에있는 자릿수 수
  • 추신 ... 소수점의 왼쪽에있는 자릿수 수

예시:

CREATE TABLE dbo.MyTable
( MyDecimalColumn decimal(5,2)
 ,MyNumericColumn numeric(10,5)
);

INSERT INTO dbo.MyTable VALUES (123, 12345.12);

SELECT MyDecimalColumn, MyNumericColumn FROM dbo.MyTable;

결과:

MyDecimalColumn: 123.00 (p=5, s=2)

MyNumericColumn: 12345.12000 (p=10, s=5)

링크 : msdn.microsoft.com

다른 팁

당신은 사용해야합니다 10 진수 (p, s) 99.9%의 경우.

퍼센트는 프레젠테이션 개념 일뿐입니다. 10%는 여전히 0.1입니다.

실수로 표현 될 때 가장 높은 예상 값/원하는 소수점 자리에 대한 정밀도와 스케일을 선택하기 만하면됩니다. 값 <100%에 대한 p = s를 가질 수 있으며 단순히 소수점을 기준으로 결정할 수 있습니다.

그러나 100% 또는 1을 저장 해야하는 경우 p = s+1이 필요합니다.

그런 다음 최대 9.xxxxxx 또는 9xx.xxxx%를 허용하므로 이것이 필요한 전부라면 최대 1을 유지하기 위해 체크 제약 조건을 추가합니다.

동의합니다. DECIMAL에는 이러한 유형의 숫자를 저장해야 합니다.그러나 결정을 더 쉽게 하려면 100의 백분율이 아닌 1의 백분율로 저장하십시오.이렇게 하면 "전체" 숫자에 관계없이 필요한 소수 자릿수를 정확하게 저장할 수 있습니다.따라서 소수점 이하 6자리를 원할 경우 DECIMAL(9, 8)을 사용하고 23.3436435%의 경우 0.23346435를 저장합니다.23.346435%로 변경하는 것은 저장 문제가 아닌 디스플레이 문제이며, 대부분의 프리젠테이션 언어/보고서 작성자 등이 해당합니다.디스플레이를 변경할 수 있습니다.

제 생각에는 10 진수 (p, s) S는 백분율 기능을 나타내는 동안 사용해야합니다. 포인트의 왼쪽에있는 각 숫자가 하나의 hunderd 퍼센트이기 때문에 우리는 하나 이상의 바이트가 필요하지 않기 때문에 'P'는 1 일도 1 일 수 있습니다. 따라서 p는 s+1 이상이어야합니다. 최대 1000%를 저장하십시오. 그러나 SQL은 'P'가 S보다 작아지지 않습니다.

예 : 28.2656579879%는 10 진수 (13, 12)이어야하며 00.282656579879 128.2656579879%가 소수 (13, 12)이어야하며 01.282656579879 여야합니다.

28%는 10 진수 (3,2)로 저장되어야합니다. 0.28 128%는 10 진수 (3,2)로 1.28로 저장해야합니다.

참고 : 100%에 도달하지 않을 것이라는 것을 알고 있다면 (즉, 값은 소수점을 사용하는 경우 항상 100% 미만입니다.

등등

열의 데이터 유형은 소수점이어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top