0.00 %에서 100.00 % 범위의 백분율 값을 유지하는 데 가장 적합한 데이터 유형은 무엇입니까?
답변
백분율에 소수점 두 자리를 가정 할 때 사용하는 데이터 유형은 백분율 저장 계획에 따라 다릅니다. 분수 등가물 (예 : 100.00 %가 1.0000으로 저장 됨)을 저장하려는 경우 값이 1.0000을 초과하지 않고 (최대 값이라고 가정) 0 미만으로 절대로 내려 가지 않도록 decimal(5,4)
하는 CHECK
제약 조건이 있는 데이터 유형에 데이터를 저장합니다. (바닥이라고 가정). 액면가를 저장하려는 경우 (예 : 100.00 %는 100.00으로 저장 됨) decimal(5,2)
적절한 CHECK
제약 조건 과 함께 사용해야합니다 . 좋은 열 이름과 결합하면 데이터가 무엇인지, 데이터가 열에 저장되는 방식을 다른 개발자에게 명확하게 알 수 있습니다.
답변
- A와 잡습니다
decimal
. - 범위를 제한하려면 검사 제약 조건을 추가하십시오 (예 : 0 ~ 100 %; 경우에 따라 100 %를 초과하거나 잠재적으로 음수로 이동해야하는 유효한 이유가있을 수 있음).
- 값 1을 100 %로, 0.5를 50 %로 처리합니다. 이렇게하면 모든 수학 연산이 예상대로 작동 할 수 있습니다 (즉, 값 100을 100 %로 사용하는 것과 반대).
- 필요에 따라 정밀도와 스케일을 수정합니다 (괄호 안에있는 두 개의 값입니다
columnName decimal(precision, scale)
. 정밀도는 숫자에 담을 수있는 총 자릿수를 나타내고, 스케일은 소수점 이하 자릿수를decimal(3,2)
나타내므로 표현할 수있는 숫자입니다. 으로는#.##
;decimal(5,3)
될 것이다##.###
. decimal
와numeric
본질적으로 같은 것입니다. 그러나decimal
ANSI 규격이므로 달리 명시하지 않는 한 항상 사용하십시오 (예 : 회사의 코딩 표준).
예제 시나리오
- 귀하의 경우 (0.00 % ~ 100.00 %)를 원할 것
decimal(5,4)
입니다. - 가장 일반적인 경우 (0 % ~ 100 %)를 원합니다
decimal(3,2)
. - 위의 두 가지 모두에서 검사 제약 조건은 동일합니다.
예:
if object_id('Demo') is null
create table Demo
(
Id bigint not null identity(1,1) constraint pk_Demo primary key
, Name nvarchar(256) not null constraint uk_Demo unique
, SomePercentValue decimal(3,2) constraint chk_Demo_SomePercentValue check (SomePercentValue between 0 and 1)
, SomePrecisionPercentValue decimal(5,2) constraint chk_Demo_SomePrecisionPercentValue check (SomePrecisionPercentValue between 0 and 1)
)
추가 자료 :
- 소수 축척 및 정밀도 : http://msdn.microsoft.com/en-us/library/aa258832%28SQL.80%29.aspx
0 to 1
vs0 to 100
: C # : 저장 비율, 50 또는 0.50?- 십진수 대 숫자 : SQL Server에서 DECIMAL과 NUMERIC 사이에 차이가 있습니까?
답변
나는 Thomas와 동의하며 적어도 WPF 응용 프로그램에 대해 DECIMAL (5,4) 솔루션을 선택합니다.
이유를 알기 위해 MSDN Numeric Format String을 살펴보십시오.
http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString
백분율 ( “P”) 형식 지정자는 숫자에 100을 곱하고 백분율을 나타내는 문자열로 변환합니다.
그런 다음 XAML 코드에서 이것을 사용할 수 있습니다.
DataFormatString="{}{0:P}"
답변
소수점 이하 2 자리가 정밀도 수준이면 “smallint”는 가장 작은 공간 (2 바이트)에서이를 처리합니다. 100을 곱한 백분율을 저장합니다.
편집 : 십진수 유형이 아마도 더 나은 일치입니다. 그러면 수동으로 확장 할 필요가 없습니다. 값당 5 바이트가 필요합니다.
답변
n이 1.00으로 반올림하기에 충분한 해상도를 갖는 numeric (n, n)을 사용하십시오. 예를 들면 :
declare @discount numeric(9,9)
, @quantity int
select @discount = 0.999999999
, @quantity = 10000
select convert(money, @discount * @quantity)