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

    [MySQL] query di aggiornamento, dove sbaglio?

    Ciao a tutti, sto cercando di cambiare il formato delle date in un campo di una tabella,
    dall'originario UNIXTIMESTAMP al nuovo ANNO+MM+GG+HH+MM+SS ma c'e' qualcosa che non va.
    La query che ho scritto è la seguente:

    $query="UPDATE news SET datanew=from_unixtime(datalist)";

    news è il nome della tabella, datanew il campo di destinazione del nuovo formato della data, e datalist è appunto il campo dove ci sono le date in unixtimestamp che voglio convertire.
    Lasciata cosi' la stringa mi trasferisce in datanew solo l'anno e niente più.
    Ho provato allora a fare cosi':

    $query="UPDATE news SET datanew = from_unixtime(data,'%d%m%Y)";

    e funge -memorizzando ANNOMESEGIORNO correttamente- ma solo se come ho riportato sopra tolgo gli spazi vuoti tra giorno, mese e anno.
    Il vero problema è pero' l'orario, se faccio:

    $query="UPDATE news SET datanew = from_unixtime(data,'%d%m%Y %h:%i:%s')";

    non mi vede h,i e s.
    Ho provato a unirli tutti cosi':

    $query="UPDATE news SET datanew = from_unixtime(data,'%d%m%Y%h%i%s')";

    il numero finale dovrebbe essere di 14 cifre giusto?
    ANNO+MM+GG+HH+MM+SS

    ma è come se i valori si sballassero ed infatti nel campo viene memorizzato un numerone di 10 cifre che per di più è SEMPRE UGUALE per tutte le voci del campo, a prescindere dalla data originaria!

    Per cortesia ditemi dove sbaglio... maledizione a questo unixtimestamp e al giorno in cui l'ho scelto!

    Grazie a chiunque mi aiuta.

    ciao.

  2. #2
    Domanda.

    Come e' il formato del campo datanew???? cioe' e' in formato DATETIME?

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Si, dovrebbe essere in datatime o almeno cosi' lo vorrei rendere.
    Purtroppo sono costretto a passare da unixtimestamp a datatime perchè ho notato che in emulazione in locale qualsiasi valore negativo inserito precedente al 1970 mi fa andare in errore le pagine...
    Per favore aiutatemi..

  4. #4
    Originariamente inviato da Legoland
    Si, dovrebbe essere in datatime o almeno cosi' lo vorrei rendere.
    Purtroppo sono costretto a passare da unixtimestamp a datatime perchè ho notato che in emulazione in locale qualsiasi valore negativo inserito precedente al 1970 mi fa andare in errore le pagine...
    la prima query che hai postato era corretta.

    UPDATE news SET
    datanew = from_unixtime(datalist)";

    dove datanew -> campo DATETIME
    e datalist -> campo INT con unix timestamp e non timestamp di mysql

    windows non supporta valori negativi per unix timestamp e 1-1-1970 00:00:00 e' appunto l'anno zero. Questo vale anche per il timestamp di mysql.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Originariamente inviato da piero.mac
    la prima query che hai postato era corretta.

    UPDATE news SET
    datanew = from_unixtime(datalist)";

    dove datanew -> campo DATETIME
    e datalist -> campo INT con unix timestamp e non timestamp di mysql

    windows non supporta valori negativi per unix timestamp e 1-1-1970 00:00:00 e' appunto l'anno zero. Questo vale anche per il timestamp di mysql.
    nel database ho assegnato a datanew un valore INT a 15 cifre NULL senza specificare altro, ma purtroppo facendo:

    UPDATE news SET
    datanew = from_unixtime(datalist)";

    mi viene memorizzato solo l'anno, il resto lo ignora... solo specificandogli le voci come scritto in precedenza sembra vedere tutto!

    Qualcuno può provare rapidamente la cosa in locale?


  6. #6
    non e' il caso di provare....

    se metti un campo INT come puoi pretendere entri dentro un trattino o altro...

    datanew "DEVE" essere nel formato DATETIME.

    e ricorda che comunque INT al max ti memorizza 10 numeri poiche' e' un campo a 4 byte... ma solo numeri.... al max il segno negativo davanti, ma nulla piu'.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da piero.mac
    non e' il caso di provare....

    se metti un campo INT come puoi pretendere entri dentro un trattino o altro...

    datanew "DEVE" essere nel formato DATETIME.

    e ricorda che comunque INT al max ti memorizza 10 numeri poiche' e' un campo a 4 byte... ma solo numeri.... al max il segno negativo davanti, ma nulla piu'.
    ora funge, ti ringrazio. Avevo tralasciato questo importante particolare.
    Cambiando da INT a datatime ora va.

    Solo una domanda: usando datatime potrei avere problemi per il futuro?
    Intendo se faccio una query dove i risultati sono compresi tra due periodi di tempo o devono essere elencati in maniera decrescente dovrebbe funzionare tutto regolarmente?

    Scusa la banalità del quesito ma per il problema dell'unixtimestamp ora devo correggermi righe e righe di codice..

  8. #8
    Originariamente inviato da Legoland
    Solo una domanda: usando datatime potrei avere problemi per il futuro?
    Intendo se faccio una query dove i risultati sono compresi tra due periodi di tempo o devono essere elencati in maniera decrescente dovrebbe funzionare tutto regolarmente?
    certamente. ci mancherebbe proprio anche questa....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Originariamente inviato da piero.mac
    certamente. ci mancherebbe proprio anche questa....
    perfetto grazie mille per la pazienza che hai avuto nel rispondermi.
    A presto

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 © 2025 vBulletin Solutions, Inc. All rights reserved.