2012-04-10 15 views
8

Ho due colonne in una tabella popolate con valori interi. Per ogni record, voglio dividere i valori di queste due colonne e formattare l'output in modo che il punto decimale sia spostato in posti a destra.SQL Cast da int a decimale

Ad esempio, se ho i valori delle due colonne per un record come 4 e 1 e voglio dividere 1 per 4 (quindi 1/4), allora voglio che l'uscita sia 25.00.

Qui è l'ultima cosa che ho provato un po 'fa:

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

non sono stato in grado di trovare una spiegazione sintattica della funzione CAST per vedere ciò che il parametro passato a decimale rappresenta. Quando lo cambio, a volte cambia il numero di posti a destra del decimale, ma i risultati non sono sempre quello che mi aspetto quindi vorrei avere un piccolo aiuto su questo.

risposta

18

scrittura in questo modo:

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

Impressionante, vi ringrazio molto. – Darren

2

DECIMAL(2) è un numero decimale di 2 cifre prima e nessuna cifra dopo il punto decimale. Questo non ti permette di avere cifre dopo il il punto decimale!

La specifica DECIMAL(p,s) definisce il numero di cifre totali (p) e il numero di cifre dopo il punto decimale (s) (dove s non possono superare p ed è 0 se omesso).

è necessario usare qualcosa come DECIMAL(4,2) (4 cifre totale - di cui 2 dopo il punto decimale, in modo quindi: anche 2 prima del punto decimale) o qualcosa di simile - Alcune cifre prima e un po 'dopo il punto decimale - allora vedrai il risultato desiderato!

Per i dettagli sul tipo di DECIMAL e la sua sintassi, consultare l'argomento MSDN documentazione in linea su decimal and numeric

2

ci sono effettivamente un paio di parametri ..

(p, s) 

dove

  • p rappresenta la "precisione": il numero totale di cifre prima e dopo il punto decimale.
  • s rappresenta la "scala" - il numero di cifre dopo il il punto decimale.

Dando solo 1 parametro, si sta dando solo la precisione.

Vedere MDSN.

1

da libro online per tipo di dati decimale: Tipi di dati numerici con precisione e scala fisse.

decimale [(p [, s])] e numerico [(p [, s])] Precisione fissa e numeri di scala. Quando viene utilizzata la massima precisione, i valori validi sono compresi tra - 10^38 +1 e 10^38 - 1. I sinonimi SQL-92 per decimale sono dec e dec (p, s). il numerico è funzionalmente equivalente al decimale.

p (precisione) Il numero totale massimo di cifre decimali che è possibile memorizzare, sia a sinistra che a destra del separatore decimale. La precisione deve essere un valore compreso tra 1 e la precisione massima di 38. La precisione predefinita è 18.

s (scala) Il numero massimo di cifre decimali che è possibile memorizzare a destra del punto decimale. La scala deve essere un valore compreso tra 0 e p. La scala può essere specificata solo se viene specificata la precisione. La scala di default è 0; pertanto, 0 < = s < = p. Le dimensioni massime di archiviazione variano in base alla precisione.