2013-05-06 54 views
0

我正在嘗試使用下面的查詢將varchar轉換爲時間戳。oracle 11g中將varchar轉換爲時間戳R2

select staging.revival_date , 
    case when staging.revival_date <> 'Unknown' 
     then 
      TO_TIMESTAMP(
          to_char(staging.revival_date,'dd-MON-YY') 
          || 
          '00:00', 'dd-MM-YY HH24:MI' 
         ) 
     else null 
    end 
revival_on 
from stg_avg_gen_plant_outage staging 

revival_date:VARCHAR2

但它給我的錯誤,如:Invalid number

到底哪裏出問題了?

+0

爲什麼你轉換VARCHAR列使用'TO_CHAR()'一個varchar? – 2013-05-06 17:20:30

回答

2
  1. revival_date是一個varchar(因爲有時它顯然可以包含「未知」所以它是沒有意義的使用就可以了to_char()

  2. 當您轉換成時間戳格式必須匹配存儲的日期作爲一個字符串,在你的情況下,你試圖以'dd-MON-YYHH24:MI'格式(在日期和時間部分之間沒有空格)做一些東西,並告訴to_timestamp希望格式爲'dd-MM -YY HH24:MI'。所以你需要

    1. 確保數據和時間組件之間確實存在空間,並且使「月」組件匹配。