2012-04-10 28 views
8

Tengo dos columnas en una tabla que se rellena con valores enteros. Para cada registro, quiero dividir los valores de esas dos columnas y formatear la salida para que el punto decimal se mueva a lugares a la derecha.moldeada SQL de int a decimal

Por ejemplo, si tengo valores de las dos columnas para un registro como 4 y 1 y quiero dividir 1 por 4 (entonces 1/4), entonces quiero que la salida sea 25.00.

Aquí es la última cosa que probé hace un poco:

CAST(Total AS Decimal(2))/CAST(TotalAnswers AS Decimal(2)) AS 'Percent' 

no he sido capaz de encontrar una explicación sintáctica de la función CAST para ver cuál es el parámetro que se pasa en para decimal representa. Cuando lo cambio, a veces cambia el número de lugares a la derecha del decimal, pero los resultados no siempre son los que espero, así que me gustaría obtener un poco de ayuda sobre esto.

Respuesta

18

escritura de esta manera:

SELECT CAST(CAST(Total As float)/TotalAnswers * 100 As decimal(8, 2)) 
+0

impresionante, muchas gracias. – Darren

2

DECIMAL(2) es un decimal de 2 dígitos antes y no hay dígitos después del punto decimal. Eso no le permite tener los dígitos después de el punto decimal!

La especificación DECIMAL(p,s) define el número de dígitos en total (p) y el número de dígitos después del punto decimal (s) (donde s no puede ser mayor que p y es 0 si omitido).

Es necesario utilizar algo así como DECIMAL(4,2) (total de 4 dígitos - 2 de los cuales después del punto decimal, por lo tanto: también 2 antes del punto decimal) o algo por el estilo - algunos dígitos antes y algunos después de la coma decimal - ¡Entonces verás tu resultado deseado!

Para más detalles sobre el tipo DECIMAL y su sintaxis, consulte el tema de MSDN Libros en el decimal and numeric

2

Hay un par real de los parámetros ..

(p, s) 

donde

  • p representa la "precisión" - el número total de dígitos antes y después de del punto decimal.
  • s representa la "escala" - el número de dígitos después del punto decimal.

Al dar solo 1 parámetro, solo ofrece la precisión.

Ver MDSN.

1

de libros en línea para el tipo de datos decimal: tipos de datos numéricos que han fijado precisión y escala.

decimal [(p [, s])] y numérico [(p [, s])] Números de escala y precisión fijos. Cuando se usa la precisión máxima, los valores válidos son de - 10^38 +1 a 10^38 - 1. Los sinónimos de SQL-92 para el decimal son dec y dec (p, s). numérico es funcionalmente equivalente a decimal.

p (precisión) El número total máximo de dígitos decimales que se pueden almacenar, tanto a la izquierda como a la derecha del punto decimal. La precisión debe ser un valor de 1 a la precisión máxima de 38. La precisión predeterminada es 18.

s (escala) El número máximo de dígitos decimales que se pueden almacenar a la derecha del punto decimal. La escala debe ser un valor de 0 a p. La escala solo se puede especificar si se especifica precisión. La escala predeterminada es 0; por lo tanto, 0 < = s < = p. Los tamaños máximos de almacenamiento varían según la precisión.