Domanda

Perché l'istruzione select riportata di seguito restituisce due valori diversi?

declare @tempDec decimal
set @tempDec = 1.0 / (1.0 + 1.0)
select @tempDec, 1.0 / (1.0 + 1.0)
È stato utile?

Soluzione

Va bene per valori letterali come 1.0, ma se stai estraendo i dati dalle colonne della tabella, devi convertire/convertire il primo numero valutato nella tua equazione:

convert(decimal, [col1]) / ([col2] + [col3])

-O-

convert(decimal(15, 2), [col1]) / ([col2] + [col3])

Altri suggerimenti

L'ho scoperto da un collega proprio mentre l'ho pubblicato.

Devi specificare la precisione e la scala predefinite.

Funziona in questo scenario: declare @tempDec decimale (3,2)

Da MSDN:

decimale [(p [, s])] e numerico [(p [, s])] Numeri di precisione e scala fissi. Quando si utilizza la massima precisione, i valori validi vanno da - 10 ^ 38 +1 a 10 ^ 38 - 1. I sinonimi SQL-92 per decimale sono dec e dec (p, s). numerico è funzionalmente equivalente al decimale.

p (precisione) Il numero totale massimo di cifre decimali che è possibile memorizzare, sia a sinistra che a destra del punto 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 è stata specificata la precisione. La scala predefinita è 0; pertanto, 0 < = s < = p. Le dimensioni massime di archiviazione variano in base alla precisione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top