我正在将带有虚线德国日期的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');
添加到“添加值”或“表达式”中,但这只会显示以下错误消息:
[第1行中的错误] SQL语法中有错误;查看与您的手册相对应的手册 MySQL服务器版本,在'06 .04.1997'','%d。%m附近使用正确的语法。 %Y');,'2KMX','43354997')'在第2行
有什么想法吗?
答案 0 :(得分:3)
首先需要在varchar字段(temp_varchar_field)中导入日期字段,之后可以使用以下内容:
update table_name set final_date=STR_TO_DATE(temp_varchar_field,'%d.%m.%Y');
您应该执行以下操作:
alter table table_name add column temp_varchar_field varchar(10);
update table_name set final_date=STR_TO_DATE(temp_varchar_field,'%d.%m.%Y');
alter table_name drop column temp_varchar_field;
答案 1 :(得分:2)
我刚刚使用这段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()
,该变量将变为默认的MySQL日期。不需要黑客! :)
答案 2 :(得分: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)
);
...完成!
可能有一种更简单的方法可以解决这个问题,但这样您就可以对数据和格式进行大量控制。