mysql 00/00/00 00:00:00抓取并更新到新列中的int时间戳

时间:2011-04-22 12:35:59

标签: mysql timestamp

好吧,我有一个名为timestamp的字段,它的格式如下: 00/00/00 00:00:00我想获取该字段,然后以int时间戳形式将其更新为名为tm_unix的字段。那么如何通过一次更新来实现这一目标呢?我可以把它作为一个PHP循环,但认为必须有一种方法来做它mysql,只需要一个快速的答案。

除非有人能告诉我如何在格式00/00/00 00:00:00找不到30天?

由于

编辑:我正在使用mysql4

2 个答案:

答案 0 :(得分:0)

我不知道00/00/00 00:00:00

的日,月,年顺序

我举个例子

select datediff(curdate(),str_to_date('21/03/11 00:00:00','%d/%m/%Y %T')) -- 32

按正确顺序放置修饰符以符合您的情况。如您所见,您可以在不使用unix时间戳的情况下计算日期差异。我建议您使用带有更新查询的str_to_date()函数来修改格式。

修改。我添加了一个简单的例子:

create table example (
id int not null auto_increment primary key,
datestr varchar(20),
unixfield int) engine = myisam;

insert into example (datestr)
values 
('01/04/11 15:03:02'),
('22/04/11 19:03:02');

update example
set unixfield = unix_timestamp(str_to_date(datestr,'%d/%m/%Y %T'));

select *,from_unixtime(unixfield) from example;

+----+-------------------+------------+--------------------------+
| id | datestr           | unixfield  | from_unixtime(unixfield) |
+----+-------------------+------------+--------------------------+
|  1 | 01/04/11 15:03:02 | 1301662982 | 2011-04-01 15:03:02      |
|  2 | 22/04/11 19:03:02 | 1303491782 | 2011-04-22 19:03:02      |
+----+-------------------+------------+--------------------------+
2 rows in set (0.00 sec)

修改。第二次更新。 这是一个如何模拟str_to_date()播放substring()和substring_index()函数的示例。

set @dtstring = '21/03/11 15:23:10';
select str_to_date(@dtstring,'%d/%m/%Y %T'); -- 2011-03-21 15:23:10
select concat('20',substring(@dtstring,7,2),'-',substring(@dtstring,4,2),'-',substring(@dtstring,1,2),' ',substring_index(@dtstring,' ',-1)) -- 2011-03-21 15:23:10

因此,我的更新查询将变为:

update example
set unixfield = unix_timestamp(concat('20',substring(datestr,7,2),'-',substring(datestr,4,2),'-',substring(datestr,1,2),' ',substring_index(datestr,' ',-1)));

答案 1 :(得分:0)

UPDATE nameoftable SET tm_unix = UNIX_TIMESTAMP(timestamp)