PDO: update mysql `date` column from (d/m/y) to timestamp
我有一个mysql users表,其中列join_date的格式为"d/m/y"。我只想将此列更新为现有数据的时间戳。
1 2
| id name join_date
1 john 08/02/2014 |
现在,我需要运行一个代码(如while loop或foreach),将列join_date中的所有日期数据更新为时间戳〔time():〕,如下所示:
1 2
| id name join_date
1 john 1391814000 |
号
有什么建议吗?事先谢谢。
在评论中,我们可以发现不是TIMESTAMP而是DATE是您应用程序的最佳数据类型。假设join_date是varchar列,可以发出以下SQL命令来更改列类型并转换数据。
首先,您需要添加一个新的临时列:
1
| ALTER TABLE `users` ADD `temp_date` DATE; |
然后将现有字符串转换为DATE值:
1
| UPDATE `users` SET `temp_date` = STR_TO_DATE(`join_date`, '%c/%e/%Y'); |
号
现在可以删除现有列:
1
| ALTER TABLE `users` DROP `join_date` |
最后重命名临时列:
1
| ALTER TABLE `users` CHANGE `temp_date` `join_date` DATE; |
。
- 这似乎相当棘手。我会试试的。
- 如果是一个bug,你需要使用STR_TO_DATE()。现在应该可以了。
- 为什么要在Unix时间戳中存储日期?你需要在任何时候为日期添加额外的步骤。
- 问题是如何转换列类型。我不知道应用场景。根据要求,时间戳或日期时间将有"赞成"和"反对"两种情况。不是吗?
- 不好意思,它是指向@sohal07的。为了回答你的问题,你不应该使用时间戳。读这个
- @freshprinceofso谢谢你的链接。我不认为链接说,不应该使用时间戳。它只是显示了差异。例如,尽管它在今天的大多数现实场景中都不起作用,但是您可以看到它们需要的内存是日期时间的一半。
- @freshprinceofso:我不想在unix时间戳中存储日期。我只想把日期储存起来,这样以后我就能找到+1周左右的时间……所以我认为我应该在将来开始以time()格式存储日期。但此时,我需要一个代码来更新数据库中已经存储的所有日期。
- 您应该使用日期格式。会改变我的答案
- @sohal07添加一周左右的方法是使用日期函数。不要转换列,因为您不知道如何使用它们。
- @Sohal07我已经更新了帖子。如果您现在想选择,例如,每个加入日期最多为1周前,则使用:SELECT * FROM users WHERE join_date > NOW() - INTERVAL 1 WEEK。
- 谢谢……现在代码看起来很具体。
- 没问题。:)感谢@freshprinceofso,帮助您发现DATE是您应用程序的正确数据类型。