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

sottrarre due tinyint

1 view
Skip to first unread message

gianmarco

unread,
Nov 24, 2009, 7:39:04 AM11/24/09
to
se n1 e n2 sono di tipo tinyint il loro impiego in una query WHERE n1-n2
non � possibile per overflow .
come risolvere il prroblema (n1 ed n2 sono numeri positivi da 1 a 100)

--
http://www.lavorarenelfuturo.com

Marcello

unread,
Nov 24, 2009, 7:45:43 AM11/24/09
to
gianmarco ha scritto:

> se n1 e n2 sono di tipo tinyint il loro impiego in una query WHERE
> n1-n2 non � possibile per overflow .
> come risolvere il prroblema (n1 ed n2 sono numeri positivi da 1 a 100)

Ciao,

puoi fare tranquillamente la somma o la differenza di due tinyint, a
patto ovviamente di non andare oltre i limiti del tipo. E questo �
altrettanto vero per gli int o i bigint.

Se la where � del tipo:

where n1-n2>0

ti basta riscriverla come:

where n1>n2

altrimenti posta la where completa che vediamo cosa si pu� fare.
marc.

gianmarco

unread,
Nov 24, 2009, 8:06:20 AM11/24/09
to

> ti basta riscriverla come:
>
> where n1>n2
>
> altrimenti posta la where completa che vediamo cosa si pu� fare.
> marc.

non mi sembra una soluzione in quanto non so a priori se n1>n2 o viceversa.
la query completa nn ti aiuterebbe perche � una semplice select

dawn

unread,
Nov 24, 2009, 8:08:57 AM11/24/09
to
On 24 Nov, 13:39, "gianmarco" <gianpaolo.ferrad...@email.it> wrote:
> se n1 e n2 sono di tipo tinyint  il loro impiego in una query WHERE n1-n2
> non è possibile per overflow .

> come risolvere il prroblema (n1 ed n2 sono numeri positivi da 1 a 100)
>

Non sono scoppiati per il valore, ma per il segno! Il tinyint è solo
positivo...
cast è tuo amico.

declare @x tinyint
select @x = 0 -1

"Arithmetic overflow error for data type tinyint"

gianmarco

unread,
Nov 24, 2009, 8:16:26 AM11/24/09
to

ok, per il segno ma come si puo scrivere il codice di una quesry contenente
CAST di n1 e n2 devo scrivere cast(n1 as int) - cast(n2 as int)

Marcello

unread,
Nov 24, 2009, 8:46:59 AM11/24/09
to
gianmarco ha scritto:

> non mi sembra una soluzione in quanto non so a priori se n1>n2 o viceversa.

Ne ovviamente lo so io.
La frase completa era:

Se la where � del tipo:
where n1-n2>0

ti basta riscriverla come:
where n1>n2

Quindi la where proposta va bene se e solo se la where che serve a te �
"where n1-n2>0"

> la query completa nn ti aiuterebbe perche � una semplice select

Non ti ho chiesto la query completa, ma la sola where, e per l'esattezza
mi interessa il solo frammento che riguarda n1-n2.
Nel tuo primo post hai scritto "una query WHERE n1-n2", ma "WHERE n1-n2"
cosa?

WHERE n1-n2=5
WHERE n1-n2>100
WHERE n1-n2<n3

come � fatta sta where?
marc.

gianmarco

unread,
Nov 25, 2009, 3:34:12 PM11/25/09
to

--
http://www.lavorarenelfuturo.com
"Marcello" <marcello...@epomops.it> ha scritto nel messaggio
news:7n26etF...@mid.individual.net...

Marcello non ho nessuna voglia di fare polemica � chiaro che non ha nessuna
importanza cosa ci sta dopo n1-n2, infatti il problema non sta nella
condizione where ma nei tipi n1 ed n2 che se danno una sottrazione con
risultato negativo questo non puo essere accettato. Il problema lo ha
perfettamente capito dawn che mi ha dato la soluzione al mio problema e che
ringrazio.

Marcello

unread,
Nov 26, 2009, 3:48:00 AM11/26/09
to
gianmarco ha scritto:

> Marcello non ho nessuna voglia di fare polemica � chiaro che non ha nessuna importanza cosa ci sta dopo n1-n2, infatti il problema non sta nella condizione where ma nei tipi n1 ed n2
che se danno una sottrazione con risultato negativo questo non puo
essere accettato. Il problema lo ha perfettamente capito dawn che mi ha
dato la soluzione al mio problema e che ringrazio.

Ciao gianmarco,
nessuna polemica, ci mancherebbe.

La soluzione di dawn era e resta valida, quello che cercavo di mostrarti
� che probabilmente non � necessaria e, molto in generale, evitare di
applicare funzioni [in queto caso un cast] sui parametri di where � un
toccasana per le perfermances.

Considera le where:

1) a - b > 0
2) a - b > 5
3) a - b = 6
4) a - b > c - d

Queste si possono riscrivere senza perdita alcuna di informazione in una
forma senza differenza, applicando solo un po' di algebra, alla maniera di:

1) a > b
2) a > 5 + b
3) a = 6 + b
4) a + d > c + d

Tutto qui, ma se la soluzione di dawn ti soddisfa, naturalmente,
soddisfa anche me. :-)

marc.

gianmarco

unread,
Nov 27, 2009, 2:37:36 AM11/27/09
to

--
http://www.lavorarenelfuturo.com
"Marcello" <marcello...@epomops.it> ha scritto nel messaggio

news:7n6tlvF...@mid.individual.net...


> gianmarco ha scritto:
>> Marcello non ho nessuna voglia di fare polemica � chiaro che non ha
>> nessuna importanza cosa ci sta dopo n1-n2, infatti il problema non sta
>> nella condizione where ma nei tipi n1 ed n2
> che se danno una sottrazione con risultato negativo questo non puo essere
> accettato. Il problema lo ha perfettamente capito dawn che mi ha dato la
> soluzione al mio problema e che ringrazio.
>
> Ciao gianmarco,
> nessuna polemica, ci mancherebbe.
>
> La soluzione di dawn era e resta valida, quello che cercavo di mostrarti �
> che probabilmente non � necessaria e, molto in generale, evitare di
> applicare funzioni [in queto caso un cast] sui parametri di where � un
> toccasana per le perfermances.

Si certamente le performance non ci guadagnano.

> Queste si possono riscrivere senza perdita alcuna di informazione in una
> forma senza differenza, applicando solo un po' di algebra, alla maniera
> di:
>

questo vorrebbe dire che la query WHERE n1-n2 = n3-n4
potrebbe essere scritts come n1+n4 = n3+n2

ok non ci avevo pensato, sei stato molto utile . gianmarco

Marcello

unread,
Nov 27, 2009, 4:13:27 AM11/27/09
to
gianmarco ha scritto:

> questo vorrebbe dire che la query WHERE n1-n2 = n3-n4
> potrebbe essere scritts come n1+n4 = n3+n2

Esatto, e se non ricordo male, da vecchi posts, n1, n2, n3 e n4 valgono
massimo 90 e quindi la somma resta entro il tinyint, senza generare
overflow. ;-)

marc.


0 new messages