如何将德国日期转换为MySQL标准日期?

时间:2012-10-30 10:38:57

标签: mysql date

我正在将带有虚线德国日期的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行

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

首先需要在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. 如果所有内容都已正确导入,请删除临时字段。使用: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)
);

...完成!

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