如何将 CSV 数据加载到 MYSQL 中以获取 24 小时格式的 TIME 数据类型

问题描述 投票:0回答:1

我正在尝试将数据从 csv 文件加载到 MYSQL。 csv 表中的一列包含与时间相关的数据。数据存储在标题为 Issue_Time 的列中,时间值例如 07:30A 和 01:35P,其中 A 和 P 代表 AM 和 PM。我遇到的问题是我无法将数据以一种格式加载到 MYSQL 中,我可以将 AM 和 PM 时间作为 TIME 数据类型或 24 小时格式获取。

我首先尝试使用 TIME 数据类型在 MYSQL 中加载数据。我只能先使用这段代码才能加载数据。

SET @@SESSION.sql_mode='ALLOW_INVALID_DATES'; 

加载数据时,将数据转换为时间格式,时间为07:30:00和01:35:00。问题是 AM 和 PM 不再代表。因此,我现在只有 00:00:00 和 12:59:00 之间的时间。我尝试使用代码将其转换为 24 小时制

UPDATE my_table SET Issue_Time = TIME_FORMAT(Issue_Time, '%H:%i:%s')

但这没有用。

我还尝试先将数据加载为 VARCHAR(255),然后使用

转换为 TIME
UPDATE my_table SET Issue_Time = STR_TO_DATE(Issue_Time, '%H:%i%p')

这导致加载了一列 NULL 值。

有人可以帮助我以 24 小时时间格式(例如 13:35:00)或我能够从下午分辨时间的形式将数据导入 MYSQL 吗?谢谢。

mysql datetime str-to-date
1个回答
0
投票

假设您正在使用

LOAD DATA INFILE
导入 CSV,您可以使用 Input Preprocessing 通过 STR_TO_DATE() 格式化传入的时间值。并且因为你只有
A
P
时间之后,我们将 CONCAT() 来添加缺少的
M
。我们不知道你的文件或表的结构,所以这里有一个例子:

LOAD DATA INFILE 'data.csv' INTO TABLE my_table
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
    (id, name, @time)
    SET Issue_Time = STR_TO_DATE(CONCAT(@time, 'M'), '%h:%i%p')
© www.soinside.com 2019 - 2024. All rights reserved.