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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM