【问题标题】:How do I convert german dates to MySQL standard dates?如何将德国日期转换为 MySQL 标准日期?
【发布时间】:2012-10-30 10:38:56
【问题描述】:

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

有什么想法吗?

【问题讨论】:

  • 使用正则表达式查找和替换预处理您的 CSV 大约需要一分钟才能解决此问题。
  • 这确实是一个 hacky 解决方案,Jon。 ;)
  • 如果您对构建导入工具感兴趣,那么请不要使用它。 OTOH,如果您有兴趣导入数据以便继续实际工作,也许您应该考虑一下。 ;-)

标签: mysql date


【解决方案1】:

我刚刚让它与这段 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 日期。无需黑客! :)

【讨论】:

  • 对不起,我自己找到了所有的答案。 Sequel Pro 中的通配符/参数简单地表示为 $1、$2、$3 等,因此只需在 SP 中使用 STR_TO_DATE 函数将通配符输入到自动化表单中即可获得所需的结果。这样一来,我什至不需要我自己的 SQL-only 答案来进行此操作,但我想它可以作为参考。
  • Kebman,我正在尝试使用 Sequel Pro 的日期进行相同类型的导入。听起来你已经找到了答案,但我不明白。你把这段代码放在哪里了?您何时在工作流程中执行此步骤?您是否仍在使用 Sequel Pro 导入工具进行导入,或者这是您在导入后执行的操作?
  • 我在准备导入 CSV 文件时这样做。程序中有一个选项可以导入 CSV 文件。只需进行必要的编辑,或将代码块放入代码编辑器并从那里执行。
  • 好的,我一直在使用SP中的导入功能。我得到与上面相同的错误。那么有哪些必要的编辑呢?我是否在将 CSV 文件映射到表中的字段的窗口中添加此代码
  • 我打开了一个与这个问题非常相似的新问题,但我还没有找到答案。 stackoverflow.com/questions/30018355/…
【解决方案2】:

您需要先在 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;

【讨论】:

  • 试过这个,但你如何将它与 Sequel Pro 结合使用? IE。获取每个日期,然后自动将其输入到函数中?
【解决方案3】:

如果您的 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)
);

...完成!

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多