在MySQL中将日期/时间字符串转换为unix时间戳

时间:2016-08-11 12:29:07

标签: mysql date timestamp unix-timestamp

我们有一个数据库,其中所有日期和时间都存储在一个名为timestamp的列中。列中的日期/时间格式"时间戳"如:03 Aug 08:10 am。

我想将此转换(2008年8月3日上午8:10)转换为MySQL中的UNIX TIMESTAMP而不是PHP,因为我们已经有超过500行使用此格式:03 Aug 08:10 am。

我尝试创建一个名为new_timestamp的新INT列并运行此查询:

UPDATE table_name SET new_timestamp = UNIX_TIMESTAMP(timestamp);

但是,它显示0行受到影响。

这不重复,不要将我重定向到如何在PHP中进行转换。首先阅读问题:)

1 个答案:

答案 0 :(得分:2)

UNIX_TIMESTAMP()功能需要有效的日期/时间格式才能正确转换,因此您需要先将现有的日期/时间格式转换为有效/可识别的格式(包括年份)。您可以使用MySQL的STR_TO_DATE()函数执行此操作,告诉它您传入的格式,并在硬编码的年份值中连接,因为在您的情况下它总是2016年。

STR_TO_DATE(CONCAT('2016-', <your date/time value>), '%Y-%d %b %h:%i%p')

然后,您可以使用UNIX_TIMESTAMP()函数将该有效日期转换为您的unix时间戳,并在一个步骤中更新所有这些记录:

UPDATE table_name
   SET new_timestamp = 
       UNIX_TIMESTAMP(STR_TO_DATE(CONCAT('2016-', timestamp), '%Y-%d %b %h:%i%p'));