3

我正在将带有点德国日期的 CSV 文件导入 MySQL 数据库。我希望 CSV 中的日期自动正确格式化为 MySQL 使用的正确数据类型字段。

我正在使用 Sequel Pro 进行导入。我认为我应该使用该STR_TO_DATE函数,但我无法理解如何在程序中使用 Add Value 或 Expression。

德国日期

以下是 CSV 文件中的日期:

DD.MM.YYYY 例如:28.01.1978

MySQL 日期

这是我想在数据库中得到的结果:

YYYY-MM-DD
e.g.: 1978-01-28

这是我尝试过的

STR_TO_DATE('$5', '%d.%m.%Y');输入了添加值或表达式,但这只会给出以下错误消息:

[ERROR in row 1] 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 '06.04.1997''、'%d.%m 附近使用的正确语法。%Y');,'2KMX','43354997')' 在第 2 行

有任何想法吗?

4

3 回答 3

4

您需要先在 varchar 字段 (temp_varchar_field) 中导入日期字段,之后,您可以使用以下内容:

update table_name set final_date=STR_TO_DATE(temp_varchar_field,'%d.%m.%Y');

您应该执行以下操作:

  1. 创建一个临时字段:alter table table_name add column temp_varchar_field varchar(10);
  2. 使用 Sequel Pro 导入 CVS 文件,但使用 temp_varchar_field 作为日期。
  3. update table_name set final_date=STR_TO_DATE(temp_varchar_field,'%d.%m.%Y');
  4. 如果所有内容都正确导入,请删除 temp 字段。使用:alter table_name drop column temp_varchar_field;
于 2012-10-30T10:46:02.730 回答
3

我刚刚让它与这段 SQL 代码一起工作:

load data local infile 'myfile.csv' into table `mytable` 
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(surname, name, @germandate, telephone, etc)
set birthyear = STR_TO_DATE(@germandate , "%d.%m.%Y")
;

这里的线索@germandate是通过将相应列设置为STR_TO_DATE(). 无需黑客!:)

于 2012-10-30T12:20:23.827 回答
1

如果您的 CSV 导入将包含一个日期作为 MySQL 字符串会更容易,但也可以这样做:

第 1 步:为您的德国日期定义一个 varchar(10) 并导入数据。

第 2 步:向表中添加另一个字段:

ALTER TABLE `yourtable` 
ADD COLUMN `your_mysql_date` DATE NULL; 

第 3 步:移动数据:

UPDATE yourtable
SET your_mysql_date = CONCAT(
    RIGHT(your_german_date,4),
    '-',
    MID(your_german_date,4,2),
    '-',
    LEFT(your_german_date,2)
);

...完毕!

可能有一种更简单的方法可以解决这个问题,但是这样您就可以对数据和格式进行大量控制。

于 2012-10-30T10:50:37.017 回答