【问题标题】:PDO: update mysql `date` column from (d/m/y) to timestampPDO:将 mysql `date` 列从 (d/m/y) 更新为时间戳
【发布时间】: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 列的类型是什么?

标签: php mysql time


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2013-05-05
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多