2011-01-29 1 views
32

In SQL, ho col1 e col2. Entrambi sono numeri interi.Valori decimali in SQL per la divisione dei risultati

voglio fare come:

select col1/col2 from tbl1 

ottengo il risultato 1 dove col1=3 e col2=2

Il risultato che voglio è 1.1

ho messo round(col1/col2,2). Il risultato è ancora 1.

Ho inserito decimal(col1/col2,2). Il decimale non è costruito in funzione.

Come posso fare esattamente per ottenere 1.1?

+1

è 3 diviso 2 uguale a 1,5? – bensiu

+0

Sì. è .. .. – william

+12

Che tipo di arrotondamento ti dà 3/2 = 1.1? – Blorgbeard

risposta

24

È necessario eseguire il cast o convertire i valori in decimali prima della divisione. Date un'occhiata a questo http://msdn.microsoft.com/en-us/library/aa226054.aspx

Per esempio

DECLARE @num1 int = 3 DECLARE @num2 int = 2 

SELECT @num1/@num2 

SELECT @num1/CONVERT(decimal(4,2), @num2) 

La prima SELECT si tradurrà in quello che stai vedendo, mentre il secondo SELEZIONA avrà la risposta corretta 1.500000

3

Ci possono essere altri modi per ottenere il risultato desiderato.

Declare @a int 
Declare @b int 
SET @a = 3 
SET @b=2 
SELECT cast((cast(@a as float)/ cast(@b as float)) as float) 
10

SELECT CAST (col1 as float)/col2 FROM tbl1

Una fusione dovrebbe funzionare. ("Less is more".)

Da Books Online:

Restituisce il tipo di dati dell'argomento con precedenza maggiore. Per ulteriori informazioni sulla precedenza del tipo di dati, vedere Data Type Precedence (Transact-SQL).

Se un dividendo intero è diviso da un numero intero divisore, il risultato è un numero intero che ha una parte frazionaria del risultato troncato

75

Solo un altro approccio:

SELECT col1 * 1.0/col2 FROM tbl1 

Moltiplicando per 1,0 trasforma un intero in un floatnumeric(13,1) e funziona come un typecast, ma molto probabilmente è più lento di quello.

Vantaggi: meno prolisso.

+1

+1 bel approccio;) – Somebody

+2

+100500;) Inoltre possibile utilizzare senza zero SELECT col1 * 1./ col2 FROM tbl1 –

+1

+1 Molto più semplice approccio – Vandel212

1
CAST(ROUND(columnA *1.00/columnB, 2) AS FLOAT) 
+0

tanx alot
ottenere la percentuale da questa soluzione deve risultare * 100 :) –