2015-09-14 115 views
1

快速問題Oracle To_timestamp。Oracle to_timestamp

我有一個表中的兩個字段都是VARCHAR處理

1字段包含YYYYMMDD格式的值 第二個字段包含hh24mmss格式化值

我試着去這兩個字段轉換成時間戳字段,

預期輸出DD/MM/YYYY HH24:MM:SS 像 '2015年7月23日12時53分04秒'

然而,gaves我怪異的結果...... 像「7/15/0023 12時53分04秒」

似乎成爲今年日復一日變成一年..

----------我的繼承人sql ----------------

select 


    to_date(to_char(to_date('20150723','yyyymmdd'),'yyyymmdd'),'yyyymmdd') dt, 
    to_char(to_date(SUBSTR('005304000',1,6), 'hh24miss'), 'hh24:mi:ss') tm, 

TO_TIMESTAMP(
to_date(to_char(to_date('20150723','yyyymmdd'),'yyyymmdd'),'yyyymmdd') || 
to_char(to_date(SUBSTR('005304000',1,6), 'hh24miss'), 'hh24:mi:ss'), 'yyyy/mm/dd HH24:MI:SS' ) dttm 

    from dual 

回答

2

您的轉換鏈中有很多圖層。如果你把它們轉換之前將兩者連接起來的列會容易得多:

to_date(date_column||time_column, 'YYYYMMDDHH24MISS') 

將返回的日期和時間(一個Oracle DATE包括時間部分)。現在你有一個適當的日期值

,然後你可以格式化你想要的:

to_char(to_date(date_column||time_column, 'YYYYMMDDHH24MISS'), 'yyyy/mm/dd HH24:MI:SS') 

當你的「時間」列不包含毫秒存在使用to_timestamp沒有真正的好處。


但是你應該真的解決您的表,並將該信息存儲在一個單一的DATE(或TIMESTAMP)列。在varchar列中存儲日期始終是一個非常糟糕的選擇。

+0

是的。我認爲我在轉換之前首先錯過了日期/時間的那部分連接..這個表格是來自平面文件的負載並且不能改變.. – delroekid

+0

@delroekid:你也有一個不必要的'to_date()'調用的結果'to_char()' –