代码之家  ›  专栏  ›  技术社区  ›  John Perez

在Mysql中统一具有不同日期格式的字段

  •  0
  • John Perez  · 技术社区  · 7 年前

    我正在使用Mysql workbench。

    我在csv中有一个巨大的数据库,其中包括3列不同格式的日期。 为了能够将这个csv文件加载到我的数据库中,我必须将3个日期列设置为文本,否则无法正确上载。 以下是我的数据示例:

    inDate,                   outDAte
    19-01-10,                 02-02-10
    04-01-11 12:02,           2011-01-11 11:31
    29-01-11 6:57,            29-03-2010
    30-03-10,                 01-04-2010
    2012-12-03 05:39:27.040,  12-12-12 17:04
    2012-12-04 13:47:01.040,  29-11-12
    

    我想对它们进行同质化,并在其中的每一列中创建两列,其中一列只包含“日期”,另一列只包含“时间”。

    我尝试过使用“正则表达式”和“case”。
    当我使用“reg expressions”时,给了我null,而使用“case”时,给了我“截断的错误值”。

    我试图在网上找到类似的情况。我发现人们也有类似的问题,但有两种日期格式,没有我那么多不同的格式:

    我在这方面真的是新手,我不知道如何在mysql中编写这么多异常。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rick James diyism    7 年前

    将CSV加载到临时表中;按摩该表中的值;最后复制到“真实”表。

    该表中每个日期有2列;一个用于CSV的原始值;另一个是 DATETIME(3) (或任何经过消毒的版本)。

    针对每个明显不同的格式执行以下操作之一:

    UPDATE tmp SET inDate = ...
               WHERE raw_inDate REGEXP '...';
    

    这个 WHERE 可能需要这样的东西 AND LENGTH(inDate) = 8 以及除REGEXP之外的其他测试方法。

    SUBSTRING_INDEX(inDate, '-', ...) 可能是一个方便的分割日期的功能。

    但是,实际上,我宁愿用Perl或其他真正的编程语言编写代码。