Visualizzazione risultati 1 fino 6 di 6

Discussione: [MySql] Convertire campo da varchar a date

  1. #1
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito [MySql] Convertire campo da varchar a date

    Salve a tutti,

    ho dei dati in un campo varchar e vorrei convertirli in date, successivamente spostarli da

    PublishDate (campo) a year (campo)

    esempio:

    da 20210206

    a 2021-02-06

    struttura database (parziale)

    BookID

    PublishDate = varchar(8)
    e' il campo iniziale dove prelevare i dati

    year = date e' il secondo campo dove inserire i dati convertiti

    questo e' il codice fornitomi da mzanella, ma non funziona

    Codice:
    <?php
    
    require_once("connetti.php");
    
    $query = "SELECT BookID, year, PublishDate FROM book";
    $result = mysql_query($query);
    while ($row = mysql_fetch_assoc($result)) {
        $nuova_data = substr($row['PublishDate'], 0, 4) . '-' . substr($row['PublishDate'], 4, 2) . '-' . substr($row['PublishDate'], 6);
        $query = "UPDATE book SET year = '$nuova_data' WHERE BookID = '$row'['BookID']";
        mysql_query($query);
    }
    
    ?>
    Ultima modifica di blackskyisback : 06-02-2021 alle ore 13.31.05

  2. #2
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    La stringa originaria dovrà sempre essere da 8 caratteri altrimenti otterrai un risultato inatteso.
    Codice PHP:
    <?php
    error_reporting
    (E_ALL | E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    require_once(
    "connetti.php");

    $query = "SELECT BookID, year, PublishDate FROM book";
    $result = mysql_query($query);
    while (
    $row = mysql_fetch_assoc($result)) {
    $nuova_data = substr($row['PublishDate'], 0, 4) . '-' . substr($row['PublishDate'], 4, 2) . '-' . substr($row['PublishDate'], 6);
    $query = "UPDATE book SET year = '$nuova_data' WHERE BookID = '{$row['BookID']}'";
    if(
    mysql_query($query) !== true) {
    echo
    'errore ' . "\n";
    }
    }
    Ho cambiato l'apice singolo
    Ultima modifica di darbula : 06-02-2021 alle ore 15.06.55

  3. #3
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Ciao Darbula

    prima di fare disastri, i record d'aggiornare sono oltre 5000

    la stringa di default di PublishDate non e' sempre 8 , manca il giorno





    ps: dov'era'l'errore del codice di mzanella?
    Ultima modifica di blackskyisback : 06-02-2021 alle ore 15.07.11

  4. #4
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    Predefinito

    C'è un errore di sintassi mentre il modo corretto è dove commento $query2 in questo esempio https://3v4l.org/21GA4
    Però non ti occorre tale codice ma una versione più raffinata, prima però devo stilare ogni casistica del valore originario.
    Sarà almeno presente l'anno? C'è probabilità sia un null o stringa vuota?
    La seconda domanda avrai sempre anno da quattro cifre (mese da due cifre e/o giorni da due cifre se presenti)? Lo so che a volte manca il giorno ma mi occorre una struttura uniforme di ciò che intendi tu per data.
    Purtroppo senza coerenza stiamo reinventando la ruota poiché esistono funzioni che fanno il loro dovere.
    Ultima modifica di darbula : 06-02-2021 alle ore 15.54.12

  5. #5
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito





    NULL non sono presenti, ho fatto una query e' il risultato mi ha restituito 0 record
    Ultima modifica di blackskyisback : 06-02-2021 alle ore 16.00.49

  6. #6
    blackskyisback non è connesso Utente attivo
    Data registrazione
    29-05-2012
    Messaggi
    452

    Predefinito

    Ultima modifica di blackskyisback : 08-02-2021 alle ore 18.00.08

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •