【问题标题】:Converting A SQL Column From VARCHAR to Date将 SQL 列从 VARCHAR 转换为日期
【发布时间】:2014-01-23 09:10:22
【问题描述】:

在我上次发帖后:SQL Query On Date When Type Is VARCHAR

我决定将列从 VARCHAR 类型转换为 DATE 类型。

所有字段都已经有“22/01/14”这样的数据设置。

以前有人做过吗?

谢谢,

斯科特

【问题讨论】:

  • 你试过了吗?
  • 一种方法是创建一个具有正确数据类型的新列并转换数据,然后删除旧列。
  • 是的,这就是我想做的...创建一个名为“CopyField1”的新字段,然后将数据转换为正确的“数据”类型...删除旧字段,然后重命名“CopyField1”回到正确的名字... :-)
  • 确保旧列没有任何外键关系

标签: mysql


【解决方案1】:

使用STR_TO_DATE() 喜欢:

mysql> SELECT STR_TO_DATE('22/01/14','%d/%m/%Y'); +------------------------------------------------+ | STR_TO_DATE('22/01/14','%d/%m/%Y') | +------------------------------------------------+ | 2014-01-22 | +------------------------------------------------+ 一组中的 1 行(0.00 秒)

-所以在你的UPDATE 语句中应用它。如果您要更改列类型,那么直接更改它是不安全的。假设您当前的列名称为str_date。那么:

  • 添加新列,例如:ALTER TABLE t ADD new_date DATE
  • 复制正确的值:UPDATE t SET new_date=STR_TO_DATE(str_date,'%d/%m/%Y')
  • 删除旧列:ALTER TABLE t DROP str_date
  • 重命名新列:ALTER TABLE t CHANGE new_date str_date DATE

【讨论】:

    【解决方案2】:

    我建议你像这样在几个sql中更改表结构:

    alter table `mytable` add `_IssueDate` DATE NOT NULL after `IssueDate`;
    update `mytable` set `_IssueDate`=STR_TO_DATE(`IssueDate`, '%d/%m/%Y');
    alter table `mytable` drop `IssueDate`;
    alter table `mytable` change `_IssueDate` `IssueDate` DATE NOT NULL;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多