php - MySQL 将每个日期字段转换为时间戳

标签 php mysql timestamp unix-timestamp

我使用 sencha touch 2 和 mysql 开发了一个混合应用程序。 问题是我犯了一个大错误。我将此格式的所有日期字段保存为 varchar:

'23.05.2013 19:00'

现在对这个字段进行排序相当复杂。我现在想将每个字段转换为时间戳。

我可以用 mysql 查询来做到这一点吗?

或者我是否必须使用 PHP 读取每条记录,更改值并更新字段?

最佳答案

假设我们想将 '23.05.2013 19:01' 转换为 '2013-05-23 19:01:00',我们可以使用 SUBSTRING_INDEX()MAKEDATE( )

SET @dt := '23.05.2013 19:01';

SELECT @dt, SUBSTRING_INDEX(@dt, '.', 1) AS day,
  SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, '.', 2), '.', -1) AS month,
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, '.', 3), '.', -1), ' ', 1) AS year,
  SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, ' ', -1), ':', 1) AS hour,
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, ' ', -1), ':', 2), ':', -1) AS minute,
  '00' AS second;
+------------------+------+-------+------+------+--------+--------+
| @dt              | day  | month | year | hour | minute | second |
+------------------+------+-------+------+------+--------+--------+
| 23.05.2013 19:01 | 23   | 05    | 2013 | 19   | 01     | 00     |
+------------------+------+-------+------+------+--------+--------+
1 row in set (0.00 sec)

SELECT @dt, CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, '.', 3), '.', -1), ' ', 1), '-',
  SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, '.', 2), '.', -1), '-',
  SUBSTRING_INDEX(@dt, '.', 1), ' ',
  SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, ' ', -1), ':', 1), ':',
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(@dt, ' ', -1), ':', 2), ':', -1), ':00') AS datetime;
+------------------+---------------------+
| @dt              | datetime            |
+------------------+---------------------+
| 23.05.2013 19:01 | 2013-05-23 19:01:00 |
+------------------+---------------------+
1 row in set (0.00 sec)

最后,我们需要以下 SQL;

// add temp column
ALTER TABLE tab ADD valid_datetime DATETIME;

// update temp column to valid datetime value
UPDATE tab SET valid_datetime = CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(wrong_datetime, '.', 3), '.', -1), ' ', 1), '-',
  SUBSTRING_INDEX(SUBSTRING_INDEX(wrong_datetime, '.', 2), '.', -1), '-',
  SUBSTRING_INDEX(wrong_datetime, '.', 1), ' ',
  SUBSTRING_INDEX(SUBSTRING_INDEX(wrong_datetime, ' ', -1), ':', 1), ':',
  SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(wrong_datetime, ' ', -1), ':', 2), ':', -1), ':00');

// rename temp column to old column
ALTER TABLE tab DROP wrong_datetime, CHANGE valid_datetime wrong_datetime DATETIME;

关于php - MySQL 将每个日期字段转换为时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23541492/

相关文章:

MySQL 查询 - 我们如何在 3 个表中选择特定值中的多列

php - 未使用的 mysql 连接会减慢脚本速度吗?

java - 从毫秒创建一个 GregorianCalendar 实例

ios - 如何在 iOS 应用程序的相机中添加当前时间戳

PHP fatal error : Call to a member function format() on a non-object any idea

mysql - 将生产数据库导入到另一台服务器会引发错误

php - 是否有可能在 php 中获取调用者上下文的魔法常量?

java - 在java中将一个月计算为 "between"期间

php - 改变多列的列类型

php - 使用 PHP 压缩的文件在提取后生成 cpgz 文件