2014-01-23 51 views
0

我的最后一个职位后:SQL Query On Date When Type Is VARCHAR转换SQL列从VARCHAR迄今为止

我已经决定我要去从VARCHAR列转换为DATE类型。

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

有没有人做过此事。

感谢,

斯科特

+0

你尝试过什么吗? –

+1

执行此操作的一种方法是创建正确数据类型的新列并转换数据,然后删除旧列。 –

+0

是的,这正是我想要做的......创建一个名为'CopyField1'的新字段,然后将数据转换为正确的'data'类型... 删除旧字段,然后将'CopyField1'重命名为正确的名称... :-) – WebDevB

回答

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 row in set (0.00 sec) 

- 所以你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
0

我建议你换台结构在几个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;