当前格式为mm/dd/yy时,如何轻松地将oracle db"varchar"列更改为"date"

Rya*_*588 1 sql oracle date

我在Oracle 11g数据库中有一个列,其中包含日期,当前是字符串.但是,我想创建一个基于日期获取和订单的查询.我不相信我能做到这一点,除非他们是约会,而不是varchars.如何轻松有效地更改此列(7k行)?

例:

alter table TABLE alter column COLUMN date not null
Run Code Online (Sandbox Code Playgroud)

但是,我担心这会让我丢失数据.如果确实如此,我总是可以支持它,但我只想知道是否有办法绕过那个繁琐的程序.

Jor*_*pos 5

而且您无法按照自己的方式更改列.您必须创建临时日期列

ALTER TABLE yourTable add tempDate date not null;
Run Code Online (Sandbox Code Playgroud)

然后使用格式化的日期更新它:

UPDATE yourTable SET tempDate = to_date( yourVarcharDateColumn, 'mm/dd/yy' );
Run Code Online (Sandbox Code Playgroud)

然后删除列并重新创建它

ALTER TABLE yourTable DROP COLUMN yourVarcharDateColumn;
ALTER TABLE yourTable ADD yourVarcharDateColumn DATE NOT NULL;
Run Code Online (Sandbox Code Playgroud)

然后使用temp中的值更新它

UPDATE yourTable SET yourVarcharDateColumn = tempDate;
Run Code Online (Sandbox Code Playgroud)

然后放下临时列

ALTER TABLE yourTable DROP COLUMN tempDate;
Run Code Online (Sandbox Code Playgroud)

编辑

正如@beherenow在评论中指出的那样,RENAME可以选择我忘记的专栏.

所以它会是:

  • 添加tempColumn
  • 使用格式化日期更新tempColumn
  • 放下旧栏目
  • 然后使用以下命令重命名tempColum:

ALTER TABLE yourTable RENAME COLUMN tempDate to yourVarcharDateColumn;

  • 在删除实际的`yourVarcharDateColumn`之后,为什么不将`tempDate`重命名为`yourVarcharDateColumn`?) (2认同)