2011-12-02 320 views
2

我已经将所有日期存储到我的数据库中,现在我想将它们转换为TIMESTAMP中的varchar(10)如何将varchar(10)转换为TIMESTAMP?

当我运行SQL

ALTER TABLE `demo3` CHANGE `date` `date` TIMESTAMP NOT NULL 

它警告:

#1292 - Incorrect datetime value: '1320534000' for column 'date' at row 1 

顺便说一句,我的所有日​​期formart 10个数字。

+1

表示日期的字符串是什么格式? –

+0

@Anthony Grist,'1320534000'他们从'strtotime()' –

+0

@fishman转移我不知道你是Converse的粉丝:p – ajreal

回答

2

您应该先将时间戳更改为datetime,然后才能更改列的类型。

ALTER TABLE `demo3` MODIFY COLUMN `date` varchar(25); 

UPDATE `demo3` SET `date`= FROM_UNIXTIME(`date`); 

ALTER TABLE `demo3` CHANGE `date` `date` TIMESTAMP NOT NULL 
+0

这很酷 - 我认为你需要一个中间列变成。我会在稍后尝试 - 谢谢! – dash

0

首先,您必须使用FROM_UNIXTIME函数将该unix时间戳格式转换。

1

您需要添加一个所需类型的新列,然后更新该表,将字符串转换为更新语句中每一行的数字。

因此,与NULL

然后运行类似的东西的默认添加新的时间戳列:

UPDATE demo3 SET new_timestamp = CONVERT(date, signed) 

(您可能需要尝试从UNIX时间戳和转换回再 - 见http://kitt.hodsden.org/mysql/converting_to_mysqls_timestamp_from_int11

应该将整数推入时间戳列。

然后摆脱原始日期列并重命名时间戳列。