Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    SQL: update su campo di tipo int positive

    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

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    set sql_mode = no_unsigned_subtraction;
    UPDATE table SET campo = campo - variabile;
    oppure, senza mettere mano agli sql modes ed evitando pure i warning:

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

  3. #3
    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

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    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.

  5. #5
    ah ok, grazie
    proverò più tardi e ti farò sapere

  6. #6
    la query funziona a meraviglia!
    Grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.