好吧,我有一个名为timestamp的字段,它的格式如下: 00/00/00 00:00:00我想获取该字段,然后以int时间戳形式将其更新为名为tm_unix的字段。那么如何通过一次更新来实现这一目标呢?我可以把它作为一个PHP循环,但认为必须有一种方法来做它mysql,只需要一个快速的答案。
除非有人能告诉我如何在格式00/00/00 00:00:00找不到30天?
由于
编辑:我正在使用mysql4
答案 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)