我在Oracle 11g数据库中有一个列,其中包含日期,当前是字符串.但是,我想创建一个基于日期获取和订单的查询.我不相信我能做到这一点,除非他们是约会,而不是varchars.如何轻松有效地更改此列(7k行)?
例:
alter table TABLE alter column COLUMN date not null
Run Code Online (Sandbox Code Playgroud)
但是,我担心这会让我丢失数据.如果确实如此,我总是可以支持它,但我只想知道是否有办法绕过那个繁琐的程序.
而且您无法按照自己的方式更改列.您必须创建临时日期列
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可以选择我忘记的专栏.
所以它会是:
ALTER TABLE yourTable RENAME COLUMN tempDate to yourVarcharDateColumn;