attributo composto

Ciao ragazzi, ho un attributo `endtime` che ho definito così: varchar(20) DEFAULT NULL. Tale attributo è composto da una data e un orario.

E' possibile scomporre questo attributo in due (uno indicante la data e l'altra l' orario)?

inviato 6 anni fa
lilux
X 0 X

MySQL dispone del tipo DATETIME che per mette di inserire una data completa di orario. Io lo preferirei ad due campi separati.

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Purtroppo, ho necessità di dividere il campo.

Sai se c'è un modo per dividerlo in maniera automatica?

risposto 6 anni fa
lilux
X 0 X

Dovresti creare due nuove colonne, una di tipo DATE e l'altra di tipo TIME, poi dovresti lanciare una UPDATE del tipo:

UPDATE nome_tabella SET nuova_colonna_con_la_data = DATE(STR_TO_DATE(colonna_originale, 'formato in cui è salvata la data originale)), nuova_colonna_con_orario = TIME(STR_TO_DATE(colonna_originale, 'formato in cui è salvata la data originale));

Per specificare il formato con cui è stata inserita la data originale devi usare questa sintassi:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni,

 sono riuscita a creare la colonna con la data e i rispettivi valori ma quella inerente all'orario rimane null. Ho riprovato con:

UPDATE tabella_reality_mining_1

SET end_time = TIME(STR_TO_DATE(endtime, '%T'));

con end_time=nome_nuova_colonna

       endtime=nome_originario_colonna

       %T= formato hh:mm:ss

La sintassi è giusta perchè l'elaborazione avviene e non compare alcun errore ma la colonna end_time continua ad avere tutte le righe impostate a null.

Cosa posso fare?

risposto 6 anni fa
lilux
X 0 X

mi fai un esempio di data memorizzate in endtime

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Un esempio di valore contenuto nel campo endtime è 4/3/2005 14:38:03.

Nel campo data appare 2005-03-04 mentre nel campo end_time appare NULL.

 :bye:

risposto 6 anni fa
lilux
X 0 X

La stringa '4/3/2005 14:38:03' ha come formato '%e/%c/%Y %H:%i%S' quindi devi SEMPRE usare

STR_TO_DATE(endtime, '%e/%c/%Y %H:%i%S')

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Dato che il campo data, l'ho già creato usando il formato ' %d/%m/%Y', posso mandare in esecuzione solamente:

UPDATE tabella_reality_mining_1

SET end_time=TIME(STR_TO_DATE(endtime,'%i%S'))

oppure devo rifare tutto?

risposto 6 anni fa
lilux
X 0 X

Se il campo data è stato creato correttamente allora devi solo lanciare l'UPDATE solo sul campo time, però usando il formato che ti ho passato.

Il fatto che nel formato ci sia anche la parte della data non deve fuorviarti, perché è la funzione TIME a estrarre l'orario. Il formato serve solo ad interpretare correttamente in contenuto originale della colonna.

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Gianni, scusa ancora! Ho capito quello che mi hai scritto e per questo ho mandato in esecuzione:

SET end_time=TIME(STR_TO_DATE(endtime,'%H:%i:%S')

ma compare ancora null.  :-[

risposto 6 anni fa
lilux
X 0 X

No, devi lanciare:

SET end_time=TIME(STR_TO_DATE(endtime, '%e/%c/%Y %H:%i%S'))

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

 :'( non funziona

risposto 6 anni fa
lilux
X 0 X

Allora procediamo per gradi: lancia la query SLECT STR_TO_DATE(endtime, '%e/%c/%Y %H:%i%S') FROM nome_tabella. Cosa restituisce?

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

mi esce una colonna di nome SELECT STR_TO_DATE(endtime, '%e/%c/%Y %H:%i%S') le cui righe sono (NULL)

 :bye:

risposto 6 anni fa
lilux
X 0 X

Al posto di %H:%i%S, ho messo %T così come è indicato nel link che mi hai passato:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format

e mi esce una colonna di nome SELECT STR_TO_DATE(endtime, '%e/%c/%Y %T') le cui righe hanno valori del tipo '4/3/2005 14:38:03'

risposto 6 anni fa
lilux
X 0 X

Si, avevo saltato un "due punti" nella parte dell'orario. Con la scringa '%e/%c/%Y %T' sembra interpretare bene l'orario.

Prova adesso ad aggiungere la funzione TIME alla SELECT che hai lanciato e vedi se estrae correttamente gli orari. In caso positivo procedi con l'UPDATE.

 :bye:

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Intendi dire che devo lanciare:

SELECT end_time=TIME(STR_TO_DATE(endtime,'%T'))

from nome_tabella

Se si, l'ho fatto ma il risultato è sempre "NULL".

Non esiste una funzione che mi permetta di cancellare tot caratteri di un determinato campo? Risolverei il problema  :(

risposto 6 anni fa
lilux
X 0 X

No, prova questa:

SELECT TIME(STR_TO_DATE(endtime,'%e/%c/%Y %T')) from nome_tabella

risposto 6 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni!

 Finalmente ci sono riuscita!  :)

risposto 6 anni fa
lilux
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda