oracle中時間戳轉為Date型別的資料
阿新 • • 發佈:2018-12-28
問題描述:
一個表中原本應該存放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 TOCREATEDATE; ALTER TABLE CS_USER RENAME COLUMN OPERATE_TIME1 to OPERATE_TIME;