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

    [MYSQL] copia e modifica tipo da un campo ad un altro

    In MYSQL ho una tabella in cui tra gli altri campi ho il campo, data_nascita, impostato come varchar(250) in cui le date sono memorizzate come 29-Oct-1985.
    Ho dovuto impostare il campo in questo modo perchè importando i dati da excel le date mi venivano copiate in maniera errata.
    Ora avrei la necessità di cambiare il tipo campo come date.
    Ho pensato di cambiare il formato del campo da pannello di controllo di MYSQL (fortuna che avevo duplicato la tabella) e tutte le date mi sono state trasformate come 0000-00-00.
    Vorrei fare una cosa.
    1) aggiungere temporaneamente un nuovo campo impostato a date
    2) copiarvi le date nel giusto formato (immagino che debba usare la funzione UPDATE)
    3) cancellare la colonna originale
    4) rinominare la nuova colonna col nome della precedente per non dover modificare tutti i files della gestione di questa tabella
    Però non so come eseguire il secondo punto, o meglio, come leggere la data originale, trasformarla in formato MYSQL e scriverla nel nuovo campo
    La tabella contiene un paio di centinaia di record, quindi farlo manualmente è impensabile.

    Se mi date una mano in questo vi ringrazio

  2. #2

  3. #3
    Ti ringrazio Cesar,
    Però le 2 sintassi suggerite nel link che mi hai dato non funzionano nel mio caso, probabilmente per via del mese scritto in lettere (07-Dec-1982 )
    codice:
    SELECT id, 
          data_nascita, 
          STR_TO_DATE('data_nascita', '%d/%M/%Y') as data_nuova 
          FROM agenda_clone
    Nella colonna data_nuova mi restituisce tutti NULL
    codice:
    SELECT id, 
          data_nascita, 
          concat(substring(data_nascita,8,4),'-',substring(data_nascita,4,3),'-',substring(data_nascita,1,2)) as data_nuova 
          FROM agenda_clone
    Nella colonna data_nuova mi restituisce giustamente mi restituisce 1982-Dec-07
    Allora ho provato con una UPDATE (ma su un solo record per non combinare casini)
    codice:
    UPDATE agenda_clone 
          SET nato_il = CONCAT(substring(data_nascita,8,4),'-',substring(data_nascita,4,3),'-',substring(data_nascita,1,2)) 
          WHERE id = 2
    Purtroppo anche questa fallisce perchè nel campo nato_il mi restituisce 0000-00-00
    Infine ho provato anche questa
    codice:
    UPDATE agenda_clone 
          SET nato_il = STR_TO_DATE('data_nascita', '%d/%M/%Y') 
          WHERE id = 2
    Ma anche questa mi restituisce un NULL
    Probabilmente il problema è dato dal mese scritto in lettere anzichè in numero.


  4. #4
    Moderatore di Annunci siti web L'avatar di Cesar
    Registrato dal
    Dec 2001
    Messaggi
    3,446
    devi prima trasformare i mesi in numeri.

  5. #5
    A riciao Cesar,
    Quando debbo impegnarmi per trasformare i mesi in numero tanto vale che inserisca semplicemente la data giusta
    A meno che una volta letta la vecchia colonna tramite SELECT la elaboro in PHP e poi la do in pasto al MYSQL con UPDATE.

    Ma mi sembra comunque troppo elaborato a meno che MYSQL stesso non abbia una propria funzione per fare questo.

    Altrimenti la soluzione è quella detta qui sopra.
    Nella WHILE, per leggere il RECORD SET restituito dalla SELECT, leggo la vecchia data.
    In PHP trasformo, magari aiutato da qualche array, la data di turno, e, dopo l'elaborazione, faccio l'UPDATE.

    Non so che pesci prendere. Potresti dirmi se questa strada alternativa è almeno accettabile.

  6. #6
    Moderatore di Annunci siti web L'avatar di Cesar
    Registrato dal
    Dec 2001
    Messaggi
    3,446
    Prova così:

    codice:
    SELECT STR_TO_DATE('29-Oct-1985','%d-%b-%Y');

  7. #7
    OK
    fatto. Questo funziona
    Ho poi provato con
    codice:
    SELECT id, `data_nascita`, STR_TO_DATE(`data_nascita`,'%d-%b-%Y') FROM `agenda_clone`
    e finalmente ottengo il fatidico risultato atteso:

    codice:
    2 	07-Dec-1982 	1982-12-07
    3 	29-Oct-1985 	1985-10-29
    4 	01-Feb-1954 	1954-02-01
    5 	21-Dec-1950 	1950-12-21
    ...     ......          ...........
    Da questo penso che possa passare all'UPDATE.

    Ti ringrazio per la pazienza che mi hai dedicato

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.