【问题标题】:convert the existing data varchar and column into a DATE将现有数据 varchar 和列转换为 DATE
【发布时间】:2013-07-19 23:27:17
【问题描述】:

我将日期存储为
varchar(256) latin1_swedish_ci

显示为:11/22/2012

现在我想将现有数据和列转换为 DATE

在 SQL 中最简单的方法是什么

谢谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    为了安全起见,我个人会添加一个新列,传输数据,然后删除

    update `table` set `new_col` = str_to_date( `old_col`, '%m/%d/%Y' ) ;
    

    在删除列之前检查数据是否正常。

    【讨论】:

      【解决方案2】:

      编辑转换现有数据使用:

      STR_TO_DATE(t.datestring, '%d/%m/%Y')
      

      来源:Convert String to Date

      您可能需要创建一个临时表来保存数据以进行转换:

      CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
          (create_definition,...)
          [table_options]
          [partition_options]
      

      然后你可以截断表格:

      TRUNCATE [TABLE] tbl_name
      

      然后您可以更改列数据类型:

      ALTER TABLE tablename MODIFY columnname DATE;
      

      然后你可以从临时表重新加载:

      INSERT INTO table 
        SELECT temptable.column1, temptable.column2 ... temptable.columnN
        FROM temptable;
      

      【讨论】:

      • 它会真正将这些字符串转换为正确的日期吗?我不认为mm/dd/yyyy 是 MySQL 将解析的日期格式。
      • 不,最初的SQL只是改变了表的数据类型。需要临时移动、转换数据、更新列数据类型并将数据移回。
      【解决方案3】:

      使用STR_TO_DATE 函数。

      创建一个具有正确数据类型的新列,使用STR_TO_DATE 函数将字符串从旧列移到新列中,然后删除旧列。

      UPDATE table SET new_col = STR_TO_DATE(old_col);

      MySQL STR_TO_DATE Reference.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-19
        • 2019-08-17
        • 2023-04-07
        • 2020-03-11
        • 1970-01-01
        • 2015-10-11
        • 2021-08-30
        • 1970-01-01
        相关资源
        最近更新 更多