我使用 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/