42

我正在尝试将日期时间转换为时间戳,但 mysql 给了我警告,而且转换后的值也是错误的。这是SQL查询

UPDATE table1 A, table2 B SET B.date_added=UNIX_TIMESTAMP(STR_TO_DATE(A.date_added, '%M %d %Y %h:%i%p')) WHERE A.id=B.id;

警告

+---------+------+--------------------------------------------------------------------------+
| Level   | Code | Message                                                                  |
+---------+------+--------------------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '2011-06-11 20:29:02' for function str_to_date |
+---------+------+--------------------------------------------------------------------------+

结果

+---------------------+---------------------+
| date_added          | date_added          |
+---------------------+---------------------+
| 2012-02-23 06:12:45 | 2012-12-23 19:08:33 |
+---------------------+---------------------+

我也尝试了以下查询,但它在时间戳字段中显示 0000-00-00 00:00:00。

UPDATE table1 A, table2 B SET B.date_added=UNIX_TIMESTAMP(A.date_added) WHERE A.id=B.id;
4

4 回答 4

35

UPDATE table1 A, table2 B SET B.date_added=UNIX_TIMESTAMP(A.date_added) WHERE A.id=B.id;

UNIX_TIMESTAMP('2015-01-15 12:00:00'); 足以将 mysql 日期时间转换为时间戳。

于 2015-01-15T15:05:05.343 回答
21

请试试这个:

UPDATE table1 A, table2 B 
SET B.date_added = FROM_UNIXTIME(A.date_added) 
WHERE A.id=B.id

参考。您似乎对格式化日期戳的方式有疑问。另请查看这篇文章:我应该使用字段“日期时间”还是“时间戳”?

于 2012-12-23T21:00:50.633 回答
5

On MySQL 5.5 this works fine:

UPDATE `some_table`
SET `timestamp_col` = `datetime_col`

with datetime_col of type DATETIME and timestamp_col of type TIMESTAMP.

That is: no needs of explicit type conversion.

于 2016-02-13T18:37:12.153 回答
2

您正在使用'%M %d %Y %h:%i%p'日期格式,但警告显示日期字符串“2011-06-11 20:29:02”,它与该格式不匹配。即,年份在前,时间为 24 小时制。

您可以'%Y-%M-%d %T'改用,该格式将匹配数据。

在此处查看有关日期格式代码的更多信息:http: //dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

于 2012-12-23T21:06:19.897 回答