PDA

Visualizza la versione completa : SQL: update su campo di tipo int positive


lorenz_italy
13-04-2011, 10:35
Salve, di ritorno dopo un pò di tempo nel forum :)

ho una tabella nel mio MySQL con un campo di tipo integer positive.
Dovrei eseguire una query UPDATE che decrementa di un intero variabile il valore del campo.

esempio:
UPDATE table SET campo = campo - variabile;

il problema è che se il risultato del decremento è negativo (in funzione del tipo integer positive del campo) non viene inserito 0 come vorrei io ma il valore massimo consentito (cioè il numero intero massimo che è possibile rappresentare).

Tra l'altro leggevo nei forum che MySQL per i valori negativi in un campo di tipo integer positive può inserire o 0 o il valore massimo e purtroppo succede il secondo caso.

Esistono soluzioni che mi consentono di non complicare troppo la query?
Vi ringrazio in anticipo per le eventuali risposte

nicola75ss
13-04-2011, 11:15
set sql_mode = no_unsigned_subtraction;
UPDATE table SET campo = campo - variabile;


oppure, senza mettere mano agli sql modes ed evitando pure i warning:



update tabella set campo = if(cast(cast(campo - variabile as unsigned) as signed) < 0,0,campo - variabile)

lorenz_italy
13-04-2011, 11:55
interessante!
una paio di domande:

- il comando set sql_mode = no_unsigned_subtraction;
devo invocarlo pogni volta che faccio la query update? Oppure posso settare sql_mode in fase di creazione del database?
- quando setto sql_mode vale per tutti i campi? non si deve specificarlo?

Grazie mille per la dritta

nicola75ss
13-04-2011, 11:58
Stavo editando il messaggio proprio mentre hai risposto.
Tralascia quanto suggerito prima e usa la query che ti ho scritto.
Credo sia la soluzione più pratica. :ciauz:

lorenz_italy
13-04-2011, 12:00
ah ok, grazie
proverò più tardi e ti farò sapere

lorenz_italy
13-04-2011, 23:17
la query funziona a meraviglia!
Grazie

Loading