1. 程式人生 > >oracle中時間戳轉為Date型別的資料

oracle中時間戳轉為Date型別的資料

問題描述:

  一個表中原本應該存放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;