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

    Aggiungere un campo con valori casuali ad una tabella già popolata, cosa sbaglio?

    Ciao,
    praticamente ho una tabella gia popolata con circa 130000 record, devo aggiungere un campo Stato_Oggetto che possa assumere i seguenti valori: 'nuovo' o 'usato'. Per ogni record il corrispettivo valore del campo Stato_Oggetto lo vorrei pseudo casuale.

    Per far si che ciò sia possibile ho pensato di fargli assumere il valore 'nuovo' se la lunghezza della stringa nel campo Descrizione è pari, mentre dovrebbe assumere il valore 'usato' se la lunghezza di tale stringa è dispari.
    E ho pensato di usare il tipo enum per il campo Stato_Oggetto
    ...ho scritto questo codice ma non mi funziona....come mai? Qualcuno sà aiutarmi?

    codice:
    mysql> UPDATE inserzione
        -> SET Stato_Oggetto enum('nuovo', 'usato')
        -> CASE WHEN MOD(LEN(Descrizione),2)=1 THEN 'nuovo' ELSE 'usato' END;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
    Come mai? Cosa c'è di sbagliato?

    Grazie
    Andrea

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    update inserzione set stato_oggetto = if(mod(char_length(descrizione),2) = 0,'nuovo','usato')

  3. #3
    Originariamente inviato da nicola75ss
    update inserzione set stato_oggetto = if(mod(char_length(descrizione),2) = 0,'nuovo','usato')
    si avevo appena risolto ma mi sono accorto che i campi testuali hanno tutti la stessa lunghezza perchè i dati li avevo creati con delle maschere...

    Qualche idea per come inserire casualmente 'nuovo' o 'usato' nel campo Stato_Oggetto? Magari usando la funzione rand()...

    Grazie
    Andrea

  4. #4
    Ho appena risolto così:

    UPDATE inserzione sET Stato_Oggetto = CASE WHEN(RAND() > 0.5) THEN 'nuovo' ELSE 'usato' END;


  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ok.
    Io avevo pensato a una cosa simile

    update inserzione set stato_oggetto = if(mod(floor(1 + (rand() * 2)),2) = 0,'nuovo','usato')

  6. #6
    che fà la funzione floor?

    Altra cosa (per pura curiosità)...se provo a castare ad int il valore dato da rand() non mi funziona...com'è?

    mysql> SELECT CAST(RAND() AD int);
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
    for the right syntax to use near 'AD int)' at line 1
    mysql>

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    La documentazione di mysql è ottima. Consultala prima di fare domande per le quali è facile trovare da sè una risposta.

    http://dev.mysql.com/doc/refman/5.0/...function_floor

  8. #8
    OK tnx :-)

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Per ottenere solo la parte intera di un numero decimale esiste la funzione truncate().

    http://dev.mysql.com/doc/refman/5.0/...ction_truncate


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.