tipo son restar porcentajes porcentaje los formato descuento datos dato cuales comodines calculo aplicar sql sql-server tsql types

son - restar porcentaje sql



¿Cuál debería ser la mejor manera de almacenar un valor porcentual en SQL-Server? (5)

Creo que se debe usar decimal (p, s) mientras que s representa la capacidad de porcentaje. la ''p'' podría haber sido 1, ya que nunca necesitaremos más de un byte ya que cada dígito en el lado izquierdo del punto es un porcentaje por ciento, por lo que la p debe ser al menos s + 1, para que pueda almacenar hasta 1000%. pero SQL no permite que la ''p'' sea más pequeña que la s.

Ejemplos: 28.2656579879% debe ser decimal (13, 12) y debe almacenarse 00.282656579879 128.2656579879% debe ser decimal (13, 12) y debe almacenarse 01.282656579879

28% se debe almacenar en decimal (3,2) como 0.28 128% debe almacenarse en decimal (3,2) como 1.28

Nota: si sabe que no va a alcanzar el 100% (es decir, su valor siempre será inferior al 100% que el uso de decimales (s, s), si lo hace, use decimal (s + 1, s).

Y así

Quiero almacenar un valor que represente un porcentaje en el servidor SQL, ¿qué tipo de datos debería ser el preferido?


Debe usar decimal (p, s) en 99.9% de los casos.

El porcentaje es solo un concepto de presentación: 10% sigue siendo 0.1.

Simplemente elija precisión y escala para los valores más altos esperados / decimales deseados cuando se expresan como números reales. Puede tener p = s para valores <100% y simplemente decidir en base a lugares decimales.

Sin embargo, si necesita almacenar 100% o 1, necesitará p = s + 1.

Esto permite hasta 9.xxxxxx o 9xx.xxxx%, así que agregaría una restricción de verificación para mantenerlo como máximo de 1 si esto es todo lo que necesito.


El tipo de datos de la columna debe ser decimal.


Estoy de acuerdo, DECIMAL es donde debe almacenar este tipo de número. Pero para facilitar la decisión, guárdela como un porcentaje de 1, no como un porcentaje de 100. De esa manera puede almacenar exactamente el número de decimales que necesita independientemente del número "completo". Entonces, si quiere 6 lugares decimales, use DECIMAL (9, 8) y para 23.3436435%, almacene 0.23346435. Cambiarlo a 23.346435% es un problema de visualización, no un problema de almacenamiento, y la mayoría de los lenguajes de presentación / redactores de informes, etc. son capaces de cambiar la pantalla por usted.


decimal (p, s) y numérico (p, s)

p (precisión):

El número total máximo de dígitos decimales que se almacenarán (tanto a la izquierda como a la derecha del punto decimal)

s (escala):

La cantidad de dígitos decimales que se almacenarán a la derecha del punto decimal (-> s define el número de decimales)

0 <= s <= p.

  • p ... número total de dígitos
  • s ... número de dígitos a la derecha del punto decimal
  • ps ... número de dígitos a la izquierda del punto decimal

Ejemplo:

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;

Resultado:

MyDecimalColumn: 123.00 (p=5, s=2) MyNumericColumn: 12345.12000 (p=10, s=5)

enlace: msdn.microsoft.com