Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: calcolo percentuale in sql

456 views
Skip to first unread message

VeroToad [MVP]

unread,
Apr 22, 2009, 4:19:53 AM4/22/09
to
Alessio ha scritto:
> e questa mi restituisce zero?
> select (2/10) * 100
> come posso calcolore una percentuale all'interno di una query

Il motivo è che l'operatore "/" applicato a due numeri interi
restituisce, per definizione, un numero intero pari alla parte intera
della divisione. Quindi 2/10 = 0 il quale, moltiplicato per 100 dà
sempre e solo zero :-)

Puoi risolvere in diversi modi.
Ad esempio invertendo l'ordine dell'operazione
(100*2)/10
ma ciò ha senso solo se ti accontenti della percentuale "troncata".

In alternativa, un trucchetto è quello di anteporre un (1.0*) che forza
il casting del numero intero a float (se non ricordo male):
((1.0*2)/10)*100)
In questo caso l'operatore / viene applicato tra un float e un numero
intero e, per definizione di operatore, il risultato sarà float.

Infine, per aver maggior controllo (anche se il tutto è un po' verboso)
potresti utilizzare gli operatori di CAST e di CONVERT per "castare" il
numero intero in qualcosa di tua scelta (come il float o il decimal).

HTH
Ciao!

--
Simone Viganò AKA VeroToad - MVP Windows Desktop Experience
My blog: http://blogs.dotnethell.it/VeroToad
RIO (Risorse in italiano per utenti di Office): http://www.riolab.org


Alessio

unread,
Apr 22, 2009, 4:07:03 AM4/22/09
to
scusate perche questa espressione produce un risultato

select (2 * 2) * 100

giorgio rancati

unread,
Apr 22, 2009, 5:14:02 AM4/22/09
to

"Alessio" <Ale...@discussions.microsoft.com> ha scritto nel messaggio
news:2940A50E-32FF-412E...@microsoft.com...

> scusate perche questa espressione produce un risultato
>
> select (2 * 2) * 100
>
> e questa mi restituisce zero?
>
> select (2/10) * 100

Ciao Alessio,

il risultato che ottieni è determinato da due fattori.
1^
----
Precedenza degli operatori (Transact-SQL)
http://msdn.microsoft.com/it-it/library/ms190276(SQL.90).aspx
----
2^
----
Precedenza dei tipi di dati (Transact-SQL)
http://msdn.microsoft.com/it-it/library/ms190309(SQL.90).aspx
----
leggendoli capirai perchè ricevi il risultato 0.

>come posso calcolore una percentuale all'interno di una query

qui ti ha già risposto Simone
:-)
--
Giorgio Rancati
[Office Access MVP]

Alessio

unread,
Apr 22, 2009, 5:30:01 AM4/22/09
to
grazie mille ad entrambi, siete stati utilissimi.
0 new messages