mysql - 将上午/下午时间更改为 Unix MySQL 并将 3 列连接成 1 列

标签 mysql database concatenation database-migration

因此,我正在努力迁移为跟踪时间和日期而创建的数据库。从数据库到数据库,这些存储的方式可能有点不稳定(我不是原作者,所以我不确定以该人的方式存储信息的推理,但我确定他们有他们的理由)。

所以我遇到的第一个问题是我必须将 6000 多行数据的三列合并为一列,同时还要将其转换为 UNIX 时间。我在 Internet 上进行了 google 和搜索,但找不到一套很好的文档来解释如何执行此操作。

我终于能够通过使用来连接列

SELECT CONCAT(startHour,':',startMinute, ' ', startTime) AS startingTime FROM events;

但是一直没能成功转到unix时间。在将连接的行动态插入另一个数据库时,我也无法使用它。

这是 SUDO 代码(意味着我稍微更改了表名和列名)。

INSERT INTO `tableName` (`id`, `label`, `startDate`, `endDate`, `startTime`, `endTime`)
    SELECT `id`, `tag`, CONCAT(startHour,':',startMinute, ' ', startTime) AS startingTime, CONCAT(endHour,':',endMinute, ' ', endTime) AS endingTime
        FROM `oldTable`;

NULL 也有问题,NULL 时间仍然会被转换,尽管转换时间不正确。

更新

这是使用 concat 时从数据库中提取的内容

SELECT CONCAT(startHour,':',startMinute, ' ', startTime) AS startingTime FROM events LIMIT 10;

+--------------+
| startingTime |
+--------------+
| NULL         |
| NULL         |
| NULL         |
| NULL         |
| NULL         |
| 8:0 am       |
| 8:0 am       |
| 8:0 am       |
| 8:0 am       |
| 1:0 pm       |
+--------------+

更新 2

我能够使用它获得一些正确的 24:00 时间格式,但仍然无法将其格式化为 Unix 时间。

STR_TO_DATE(CONCAT(endHour,':',endMinute, ' ', endTime)) AS endingTime 

更新 3

STR_TO_DATE(CONCAT('Apr 13 1980 ', endHour,':',endMinute, ' ', endTime),'%M %d %Y %h:%i%p') AS endingTime

+---------------------+
| endingTime          |
+---------------------+
| NULL                |
| NULL                |
| NULL                |
| NULL                |
| NULL                |
| 1980-04-13 17:00:00 |
| 1980-04-13 17:00:00 |
| 1980-04-13 17:00:00 |
| 1980-04-13 17:00:00 |
| 1980-04-13 17:00:00 |
+---------------------+

我在这方面运气不错,但它没有正确格式化时间。 unix 时间戳已关闭,它一直给我 12:00 的时间。应该是下午 5:00,但他努力报告正确的 24 小时时间。

更新4

每次我将某些内容转换为 UNIX_Timestamp 时,时间都会出现偏差,我不太清楚为什么。是否与可能导致此问题的时区校正有关?

为了验证我的假设,我做了一个在 MySQL 上找到的例子.该网站展示了一种创建 UNIX_TIMESTAMP 的简单方法

文档代码和结果

mysql> SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
+---------------------------------------+
| UNIX_TIMESTAMP('2005-03-27 03:00:00') |
+---------------------------------------+
|                            1111885200 |
+---------------------------------------+

我的代码和结果

SELECT UNIX_TIMESTAMP('2005-03-27 03:00:00');
//in mysql Yeilds this timestamp 1111892400
// in php Sat, 26 Mar 2005 22:00:00 -0500

更新 5(最终更新)

我没有时间尝试找出关于通过 mysql 格式化正确时间的可靠答案,因此我使用 PHP 创建了一个手动运行一次的迁移脚本。它提供了一种获取数据、格式化数据并将其插入到新表中的好方法。

最佳答案

“UNIX 时间”是什么意思?你指的是 UNIX_TIMESTAMP 吗?这不仅是 hh:mm:ss,而且也是日期。您想要的时间格式是什么?

如果您运行此程序,是否会得到您想要的结果:TIME(CONCAT(endHour,':',endMinute, ' ', endTime))

您插入的字段是时间字段吗?

更新

UNIX_TIMESTAMP(CONCAT(CURDATE(),' ',endHour,':',endMinute, ' ', endTime))

关于mysql - 将上午/下午时间更改为 Unix MySQL 并将 3 列连接成 1 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879426/

相关文章:

php - CakePHP 通过 slug 而不是 ID 过滤列表

php - AWS RDS MYSQL 每秒写入操作计数

mysql - 在 select 语句中使用存储过程的结果 [MySql]

php - 将数据库 (MySQL) 中存储的 PDF 文件插入 MPDF 输出

sql - 从单列 MySQL 中的所有行中剥离 0

java - 如何将 catalog.xml 实体与数据库匹配?

database - Cassandra 中最终一致性的含义?

java - Java 中 MessageFormat 的好处

javascript - 如果两个变量都有值,jQuery 会连接变量吗?

c++ - 字符串连接 C++