uso tipos tipo texto tamaño tabla precio para datos dato sql-server types sqldatatypes

sql-server - texto - tipos de indices en sql



¿Tipo de datos apropiado para mantener los valores porcentuales? (5)

Estoy de acuerdo con Thomas y elegiría la solución DECIMAL (5,4) al menos para las aplicaciones de WPF.

Eche un vistazo a la cadena de formato numérico de MSDN para saber por qué: http://msdn.microsoft.com/en-us/library/dwhawy9k#PFormatString

El especificador de formato de porcentaje ("P") multiplica un número por 100 y lo convierte en una cadena que representa un porcentaje.

Entonces, podrías usar esto en tu código XAML:

DataFormatString="{}{0:P}"

¿Cuál es el mejor tipo de datos para mantener los valores porcentuales que van del 0.00% al 100.00%?


Si 2 cifras decimales son su nivel de precisión, una "smallint" manejaría esto en el espacio más pequeño (2 bytes). Usted almacena el porcentaje multiplicado por 100.

EDIT: el tipo http://msdn.microsoft.com/en-us/library/aa258832%28SQL.80%29.aspx es probablemente una mejor coincidencia. Entonces no necesita escalar manualmente. Toma 5 bytes por valor.


Use numérico (n, n) donde n tiene suficiente resolución para redondear a 1.00. Por ejemplo:

declare @discount numeric(9,9) , @quantity int select @discount = 0.999999999 , @quantity = 10000 select convert(money, @discount * @quantity)


Suponiendo dos decimales en sus porcentajes, el tipo de datos que usa depende de cómo planea almacenar sus porcentajes. Si vas a almacenar su equivalente fraccionario (por ejemplo, 100.00% almacenado como 1.0000), almacenaría los datos en un tipo de datos decimal(5,4) con una restricción CHECK que asegura que los valores nunca excedan 1.0000 (suponiendo que sea el cap) y nunca ir por debajo de 0 (suponiendo que sea el piso). Si va a almacenar su valor nominal (p. Ej., 100,00% se almacena como 100,00), debe usar decimal(5,2) con una restricción CHECK apropiada. Combinado con un buen nombre de columna, deja en claro a otros desarrolladores qué datos son y cómo se almacenan los datos en la columna.


  • Mantenga como un decimal .
  • Agregue restricciones de verificación si desea limitar el rango (por ejemplo, entre 0 y 100%, en algunos casos puede haber razones válidas para ir más allá del 100% o incluso potencialmente en los negativos).
  • Trate el valor 1 como 100%, 0.5 como 50%, etc. Esto permitirá que las operaciones matemáticas funcionen como se espera (es decir, a diferencia del uso del valor 100 como 100%).
  • Modifique la precisión y la escala según sea necesario (estos son los dos valores entre paréntesis columnName decimal(precision, scale) . La precisión indica el número total de dígitos que se pueden mantener en el número, la escala indica cuántos de ellos están después del lugar decimal, por lo decimal(3,2) es un número que se puede representar como #.## ; decimal(5,3) sería ##.### .
  • decimal y numeric son esencialmente lo mismo. Sin embargo, el decimal es compatible con ANSI, por lo tanto, siempre utilícelo a menos que se indique lo contrario (por ejemplo, según los estándares de codificación de su empresa).

Escenarios de ejemplo

  • Para su caso (0.00% a 100.00%) querría decimal(5,4) .
  • Para el caso más común (0% a 100%), querrás decimal(3,2) .
  • En ambos de los anteriores, las restricciones de verificación serían las mismas

Ejemplo:

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) )

Otras lecturas: