在行的列startDate1截断数据

时间:2014-05-02 07:17:43

标签: mysql sql

我有2列的startdate和enddate类型为int。这些列用于存储时间戳数据。

现在我必须从这个时间戳中提取日期组件,将其转换回时间戳,将它存储在另一列int类型的startdate1中

但是在这样做的时候,我收到一条警告'数据在第一行的列startDate1被截断'。

sql查询是: -

ALTER TABLE `ServiceRule` ADD COLUMN `startDate1` INT(11) NULL DEFAULT NULL  AFTER `endDate` , ADD COLUMN `endDate1` INT(11) NULL DEFAULT NULL  AFTER `startDate1`;

update `ServiceRule` set `startDate1`= TIMESTAMP(DATE(from_unixtime(`startDate`)));
update `ServiceRule` set `endDate1`= TIMESTAMP(DATE(from_unixtime(`endDate`)));

现在,如果我将startDate1和endDate1的数据类型更改为TIMESTAMP,则startDate1的第一个更新查询将成功运行。 但endDate1更新查询显示警告'行'的列'endDate1'的超出范围值。

在浏览解决方案后,我知道如果输入值大于列数据类型范围,就会发生这种情况。

有人可以试着帮我吗? 提前致谢。 :)

3 个答案:

答案 0 :(得分:2)

我认为你想要的是UNIX_TIMESTAMP而不是TIMESTAMP

UNIX_TIMESTAMPFROM_UNIXTIME的反函数。

答案 1 :(得分:1)

这意味着其中一行包含一个无法转换为int的值,因为它实际上要比预期的要多得多或太少。

您是否只能将列转换为timestamp并从那里进行提取?例如,尝试查询每组100,并缩小故障行。

答案 2 :(得分:1)

当字段startDate的类型为int时,使用的alter table语句不正确,无法实现您想要的效果。

将其更改如下:

-- keeping the added fields as is, execute the following  

ALTER TABLE `ServiceRule` MODIFY COLUMN `startDate1` DATETIME DEFAULT NULL;
ALTER TABLE `ServiceRule` MODIFY COLUMN `endDate1` DATETIME DEFAULT NULL;

update `ServiceRule` set `startDate1`= TIMESTAMP(DATE(from_unixtime(`startDate`)));
update `ServiceRule` set `endDate1`= TIMESTAMP(DATE(from_unixtime(`endDate`)));