問題描述:
一個表中原本應該存放date類型的數據,但是不知道之前哪位大仙把兩個字段的類型建成了NUMBER類型的了,這樣在后台看時間肯定不方便。現在需要改成date類型,但是現在庫中是有數據的,不能直接從NUMBER改為DATE。所以需要建立先創建兩個DATE類型的臨時字段,然后把對應字段的數據轉換為Date類型的數據之后存到新字段上面,最后刪除老字段,將新字段改名為老字段。
一、新建兩個臨時字段
ALTER TABLE CS_USER ADD (CREATEDATE1 DATE,OPERATE_TIME1 DATE);
二、轉換copy數據(關鍵)
先將時間戳轉換為char類型的時間,最后再轉換為date類型的時間。
update CS_USER set CREATEDATE1=TO_DATE( (TO_CHAR(CREATEDATE / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS')), 'YYYY-MM-DD HH:MI:SS' ), OPERATE_TIME1=TO_DATE( (TO_CHAR(OPERATE_TIME / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS')), 'YYYY-MM-DD HH:MI:SS' )
三、刪除老字段,rename新字段
--清空老字段數據(刪除前需要先清空) UPDATE CS_USER SET CREATEDATE='',OPERATE_TIME=''; --刪除老字段 ALTER TABLE CS_USER drop (CREATEDATE,OPERATE_TIME); --rename新字段 ALTER TABLE CS_USER RENAME COLUMN CREATEDATE1 TO CREATEDATE; ALTER TABLE CS_USER RENAME COLUMN OPERATE_TIME1 to OPERATE_TIME;