PDO:将 mysql `date` 列从 (d/m/y) 更新为时间戳

Posted

技术标签:

【中文标题】PDO:将 mysql `date` 列从 (d/m/y) 更新为时间戳【英文标题】:PDO: update mysql `date` column from (d/m/y) to timestamp 【发布时间】:2014-03-05 23:16:19 【问题描述】:

我有一个 mysql users 表,其列 join_date 格式为“d/m/Y”。我只想将此列更新为该现有数据的时间戳

id    name    join_date
1     john    08/02/2014

现在我需要运行代码(如 while 循环或 foreach)来将列 join_date 中的所有日期数据更新为时间戳 [time():],如下所示:

id    name    join_date
1     john    1391814000

有什么建议吗?提前致谢。

【问题讨论】:

您的数据库中join_date 列的类型是什么? 【参考方案1】:

在 cmets 中,我们可以发现不是 TIMESTAMP 而是 DATE 是您应用程序的最佳数据类型。假设 join_date 是一个 varchar 列,您可以发出以下 SQL 命令来更改列类型并转换数据。

首先您需要添加一个新的临时列:

ALTER TABLE `users` ADD `temp_date` DATE;

然后将现有字符串转换为DATE 值:

UPDATE `users` SET `temp_date` = STR_TO_DATE(`join_date`, '%c/%e/%Y');

现在您可以删除现有列:

ALTER TABLE `users` DROP `join_date`

最后重命名临时列:

ALTER TABLE `users` CHANGE `temp_date` `join_date` DATE;

【讨论】:

那里有一个错误,您需要使用STR_TO_DATE()。现在它应该可以工作了。 为什么要将日期存储在 Unix 时间戳中?每当您需要处理日期时,您都会添加一个额外的步骤。 问题是如何转换列类型。不知道应用场景。根据要求,时间戳或日期时间|日期将有优缺点。不是吗? 对不起,它是针对@sohal07的。为了回答你的问题,你不应该使用时间戳。 Read this @sohal07 我已经更新了帖子。例如,如果您现在想选择每个 join_date 最多为 1 周前,请使用:SELECT * FROM users WHERE join_date > NOW() - INTERVAL 1 WEEK

以上是关于PDO:将 mysql `date` 列从 (d/m/y) 更新为时间戳的主要内容,如果未能解决你的问题,请参考以下文章

sqoop 将特定列从 hdfs 导出到 mysql

在mysql PDO中更新后选择行

将列从日期转换为日期时间

将mysql中的列从上到下行求和并选择值所在的行

Mysql 使用存储过程将 2 个值与 2 列从 vb6 到数据库进行比较

PostgreSQL,试图将日期列从 csv 文件复制到表的列