Come ottenere un risultato float dividendo due valori interi usando T-SQL?


173

Usando T-SQL e Microsoft SQL Server vorrei specificare il numero di cifre decimali quando faccio una divisione tra 2 numeri interi come:

select 1/3

Quello attualmente ritorna 0. Vorrei che tornasse 0,33.

Qualcosa di simile a:

select round(1/3, -2)

Ma questo non funziona. Come posso ottenere il risultato desiderato?


3
Hai provato 1.0 / 3?
Thilo,

Le risposte che ho ricevuto sono più che sufficienti
LaBracca,

Risposte:


277

I suggerimenti di stb e xiowl vanno bene se stai cercando una costante. Se devi utilizzare campi o parametri esistenti che sono numeri interi, puoi prima lanciarli come float:

SELECT CAST(1 AS float) / CAST(3 AS float)

o

SELECT CAST(MyIntField1 AS float) / CAST(MyIntField2 AS float)

Oppure puoi lanciarli come decimali, se vuoi un risultato decimale.
Tim

30
SELEZIONA 1.0 * MyInt1 / MyInt2
Troglo

@TroubleZero per l'utilizzo di MySQLdecimal
itsazzad

grazie mille, mi hai salvato la giornata. Sono stato provato CAST (7/3 AS float) ma ho restituito nuovamente 2. Quindi i numeri di cast risolvono il mio problema.
Yasin Yörük,

3
non c'è bisogno di lanciare sia dividendo e divisore, vedere @MS' risposta stackoverflow.com/a/30639343/2866644
Robotica

70

Perché SQL Server esegue la divisione di numeri interi. Prova questo:

select 1 * 1.0 / 3

Ciò è utile quando si passano numeri interi come parametri.

select x * 1.0 / y

1
Puoi persino tralasciare gli zero.
Giovanni

43

Non è necessario lanciarli entrambi. Il tipo di dati del risultato per una divisione è sempre quello con la precedenza del tipo di dati più elevato . Pertanto la soluzione deve essere:

SELECT CAST(1 AS float) / 3

o

SELECT 1 / CAST(3 AS float)

27

uso

select 1/3.0

Questo farà il lavoro.


13

Comprendo che CASTing FLOATnon è consentito in MySQL e genererà un errore quando si tenta di farlo CAST(1 AS float)come indicato in MySQL dev .

La soluzione a questo è semplice. Basta fare

(1 + 0.0)

Quindi utilizzare ROUNDper ottenere un numero specifico di cifre decimali come

ROUND((1+0.0)/(2+0.0), 3)

L'SQL sopra divide 1 per 2 e restituisce un float a 3 cifre decimali, come sarebbe 0.500.

Si può CASTai seguenti tipi: binario, carattere, data, data / ora, decimale, json, nchar, con segno , ora e senza segno .


3
MySQL lo consente CAST, semplicemente non consente il casting FLOAT. Cast DECIMALinvece. Vedere ad esempio stackoverflow.com/questions/7368163/… .
Markusk

7

Sembra che questo trucco funzioni in SQL Server ed è più breve (basato sulle risposte precedenti)

SELECT 1.0*MyInt1/MyInt2

O:

SELECT (1.0*MyInt1)/MyInt2

2
Mi è piaciuto di più, sembra bello anche per i calcoli percentuali:SELECT 100.0 * @Elapsed / @Total
EliSherer,

3

Usa questo

select cast((1*1.00)/3 AS DECIMAL(16,2)) as Result

Qui in questo sql prima converti in float o moltiplica per 1.00. Quale output sarà un numero float. Qui considero 2 decimali. Puoi scegliere quello che ti serve.


2

Se sei venuto qui (proprio come me) per trovare la soluzione per il valore intero , ecco la risposta:

CAST(9/2 AS UNSIGNED)

ritorna 5

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.