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) 更新为时间戳的主要内容,如果未能解决你的问题,请参考以下文章