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.
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
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"
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.
--
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.
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.
--
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
> 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.