2009-08-15 39 views
15

Tengo una tabla con estadísticas y un campo llamado time con marcas de tiempo Unix.UNIX Marca de tiempo para MySQL DATETIME

Hay alrededor de 200 filas en la tabla, pero me gustaría cambiar las marcas de tiempo de Unix a MySQL DATETIME sin perder las filas actuales. La tabla actual:

CREATE TABLE `stats` (
    `id` int(11) unsigned NOT NULL auto_increment, 
    `time` int(11) NOT NULL, 
    `domain` varchar(40) NOT NULL, 
    `ip` varchar(20) NOT NULL, 
    `user_agent` varchar(255) NOT NULL, 
    `domain_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 

Así que la time (INT) debe ser un campo de fecha y hora.

¿Cómo puedo actualizar la marca de tiempo de Unix a DATETIME de MySQL?

+0

Se puede ver cómo convertir fecha y hora en la fecha y hora en [http://www.jordigirones.com/455-convertir-unix-timestamp-en-fecha-de-mysql.html](http : //www.jordigirones.com/455-convertir-unix-timestamp-en-fecha-de-mysql.html) –

Respuesta

30

Recuerda probarlo antes de usarlo de verdad, esto está escrito desde la memoria, pero debería darte una buena idea.

ALTER TABLE `stats` CHANGE `time` `unix_time` int(11) NOT NULL // rename the old column 
ALTER TABLE `stats` ADD `time` DATETIME NOT NULL // create the datetime column 
UPDATE `stats` SET `time`=FROM_UNIXTIME(unix_time) // convert the data 
ALTER TABLE `stats` DROP `unix_time` // drop the old unix time column 
+0

Funciona muy bien, el último debe ser ALTER TABLE 'stats'. ¡Gracias! –

+0

Corregido, me complace ayudar – Lepidosteus

+0

¡Gran trabajo! ¡Funcionó perfectamente! – Abadis

3
  1. uso alterar tabla para crear una nueva columna (por ejemplo tiempo2.) Con el tipo de fecha y hora en la misma tabla
  2. estadísticas
  3. de actualización del conjunto tiempo2 = FROM_UNIXTIME (tiempo);
  4. utilice la tabla alter para a) eliminar la columna de tiempo, yb) renombrar la hora2 a la hora.
0
ALTER TABLE `stats` 
MODIFY COLUMN `time` timestamp NULL DEFAULT '0000-00-00 00:00:00' AFTER `id`; 
ALTER TABLE `stats` 
MODIFY COLUMN `time` datetime NULL DEFAULT '0000-00-00 00:00:00' AFTER `id`; 
Cuestiones relacionadas