gpt4 book ai didi

MYSQL 读取原始 CSV 数据

转载 作者:行者123 更新时间:2023-11-29 07:34:40 26 4
gpt4 key购买 nike

出于好奇,我经常从同事那里得到原始数据CSV,有时我会查看原始数据,MySQL无法读取日期或时间戳和货币等数据,

时间戳示例 2018.03.05 18:38:41 然后我使用工作台将它导出到 MySQL,然后它们显示 0000-00-00 00:00:00 因为 MYSQL 更喜欢使用自己的数据类型

我在MySQL Reference上看过

  • DATETIME 类型用于同时包含日期和时间的值部分。 MySQL 检索并显示 'YYYY-MM-DD 中的 DATETIME 值HH:MM:SS' 格式。支持的范围是 '1000-01-01 00:00:00' 到'9999-12-31 23:59:59'。

另外,还有一个关于金钱的问题(使用 DECIMAL(13,2)),因为我得到像 35,​​72 这样的欧元格式,因为如果我必须更改为 35.72忽略它,因为 MySQL 将仅在 35.00 上接收并留下 72 美分。

检查所有 CSV 文本的日期和金额对我来说可能很痛苦。我确实向同事询问过这个 CSV,他说他从他们的软件中导出了 CSV,因为他无法在软件上修改它。

有没有办法让 Mysql 可以读取和翻译正确类型的数据字段。我不确定 Workbench 是否可以做到。

最佳答案

时间戳格式应该不是问题。我测试过,效果很好。

https://dev.mysql.com/doc/refman/5.7/en/datetime.html

MySQL permits a “relaxed” format for values specified as strings, in which any punctuation character may be used as the delimiter between date parts or time parts.

money 格式必须分配给一个字符串变量,然后您可以根据解析该字符串的表达式设置您的 money 列。

这是 mysql 客户端中的示例,但您可以在 MySQL Workbench 中执行相同的操作:

mysql> create table test (id int, d datetime, money decimal(13,2));

mysql> load data local infile 'test.csv' into table test
(id, d, @n)
set money = @n + substring_index(@n, ',', 2)/100;

mysql> select * from test;
+------+---------------------+-------+
| id | d | money |
+------+---------------------+-------+
| 123 | 2018-03-05 18:38:41 | 35.35 |
+------+---------------------+-------+

回复你的评论:

mysql> select str_to_date('05.03.2018 18:38:41 UTC', '%m.%d.%Y %k:%i:%s UTC') as d;
+---------------------+
| d |
+---------------------+
| 2018-05-03 18:38:41 |
+---------------------+

不幸的是,时区没有日期格式代码,但如果您可以依赖它在您收到的数据中始终是 UTC,您可以在格式字符串中按字面意义使用 UTC,如我上面所示。

参见 https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_str-to-date

关于MYSQL 读取原始 CSV 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49537360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com