SQL-Server에 백분율 값을 저장하는 가장 좋은 방법은 무엇입니까?
-
05-07-2019 - |
문제
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)
다른 팁
당신은 사용해야합니다 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% 미만입니다.
등등
열의 데이터 유형은 소수점이어야합니다.