Oracle修改字段类型,把varchar2类型变成date类型 表已经有数据

大叔obnijeh 2009-09-15 05:34:52
Oracle修改字段类型,把varchar2类型变成date类型 表已经有数据

原来表是这样的
create table export (
name varchar2(10),
datetimes varchar2(50)
)

原来datetimes 时间的格式为 20090608121418

现在为方便按时时间查找要把datetimes 改成 date类型

alter table export modify (datetimes date) 有数据的时候,这样不起作用。

...全文
906 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大叔obnijeh 2009-09-15
  • 打赏
  • 举报
回复
太感谢opps_zhou了。
我原来在网上找的是这样的,到最后一步报格式错误。
alter table terry.modelnostone_measures add Measure_temp NUMBER(9,2); --添加一个临时字段

update terry.modelnostone_measures set Measure_temp = Measure; --把要修改的字段数据移到临时字段
commit;
update terry.modelnostone_measures set Measure = null where id>0;--把字段数据清空

alter table terry.modelnostone_measures modify Measure NVARCHAR2(20);--修改字段数据类型
update terry.modelnostone_measures set Measure = Measure_temp where id>0;--临时字段数据放回字段
commit;
feifei19850830 2009-09-15
  • 打赏
  • 举报
回复

ALTER TABLE export
ADD datetime1 DATE;
UPDATE export t
SET t.datetime1=to_date(t.datetimes,'yyyymmdd hh24:mi:ss');
ALTER TABLE export
DROP COLUMN datetimes;
ALTER TABLE export
RENAME COLUMN datetime1 TO datetimes;

先把数据保存到一列,然后删除原来的,把新建的列改成原来的列名
雪狼__ 2009-09-15
  • 打赏
  • 举报
回复
能不能给分少的我们一点说话的机会?
看了这么多贴,就这个会,还来晚了
inthirties 2009-09-15
  • 打赏
  • 举报
回复
可以先
create table export_bak (
name varchar2(10),
datetimes date
);

insert into export_bak
select name, to_date(datetimes, 'yyyymmddhh24miss') from export;

然后去掉所有export上的被references的约束

drop table export;

alter table export_bak rename to export; --- 这个rename好像要9i或者9i以上才支持

如果低于9i
就create table export as select * from export_bak; 这样就和ls的方法一样了。
opps_zhou 2009-09-15
  • 打赏
  • 举报
回复


create table export_bak
as
select * from export;

truncate table export;

alter table export modify datetimes date;

insert into export
select name, to_date(datetimes, 'yyyymmddhh24miss')
from export_bak;

commit;


17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧