2012-12-23 2 views
21

Sto cercando di convertire datetime in timestamp ma mysql mi sta dando degli avvertimenti e anche i valori convertiti sono errati. Ecco query SQLConvertire il datetime MySQL in timestamp

UPDATE table1 A, table2 B SET B.date_added=UNIX_TIMESTAMP(STR_TO_DATE(A.date_added, '%M %d %Y %h:%i%p')) WHERE A.id=B.id; 

Avvertenze

+---------+------+--------------------------------------------------------------------------+ 
| Level | Code | Message                 | 
+---------+------+--------------------------------------------------------------------------+ 
| Warning | 1411 | Incorrect datetime value: '2011-06-11 20:29:02' for function str_to_date | 
+---------+------+--------------------------------------------------------------------------+ 

risultati

+---------------------+---------------------+ 
| date_added   | date_added   | 
+---------------------+---------------------+ 
| 2012-02-23 06:12:45 | 2012-12-23 19:08:33 | 
+---------------------+---------------------+ 

Ho anche provato seguente interrogazione, ma si vede 0000-00-00 00:00:00 in campo timestamp.

UPDATE table1 A, table2 B SET B.date_added=UNIX_TIMESTAMP(A.date_added) WHERE A.id=B.id; 

risposta

13

Prova questo per favore:

UPDATE table1 A, table2 B 
SET B.date_added = FROM_UNIXTIME(A.date_added) 
WHERE A.id=B.id 

Reference. Sembra che tu abbia un problema con il modo in cui formatti la data stammp. Inoltre si prega di guardare in questo post: Should I use field 'datetime' or 'timestamp'?

+0

Ho provato anche questo, ma perché c'è il tavolo delle differenze di tempo A '2012-02-23 06: 12: 45' tavolo B' 2012-12-23 21: 01: 57' – Maximus

+0

C'è qualcosa di strano con Fusi orari e FROM_UNIXTIME, consulta http://stackoverflow.com/a/17128732/20774 per una spiegazione –

0

Stai usando '%M %d %Y %h:%i%p' come il formato della data, ma l'avviso indica una stringa data '2011-06-11 20:29:02', che non corrisponde quel formato . Ad esempio, l'anno è il primo e l'ora è nel formato 24 ore.

È possibile utilizzare '%Y-%M-%d %T' invece che il formato corrisponda ai dati.

Visualizza maggiori sui codici di formato data qui: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

15

UPDATE table1 A, table2 B SET B.date_added=UNIX_TIMESTAMP(A.date_added) WHERE A.id=B.id;

UNIX_TIMESTAMP('2015-01-15 12:00:00'); è sufficiente per convertire un datetime mysql per un timestamp.

1

Su MySQL 5.5 Questo funziona bene:

UPDATE `some_table` 
SET `timestamp_col` = `datetime_col` 

con datetime_col di type DATETIME e timestamp_col di type TIMESTAMP.

Ovvero: non è necessario eseguire la conversione del tipo esplicito.