在oracle 11g R2中将varchar转换为时间戳

时间:2013-05-06 13:54:38

标签: sql oracle11gr2

我正在尝试使用以下查询将varchar转换为时间戳。

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

出了什么问题?

1 个答案:

答案 0 :(得分:2)

  1. revival_date是一个varchar(因为有时它显然可能包含'未知',因此在其上使用to_char()毫无意义。

  2. 转换为时间戳时,格式必须与存储为字符串的日期相匹配。在你的情况下,你试图用'dd-MON-YYHH24:MI'格式(没有日期和时间组件之间的空格)并告诉to_timestamp期望字符串格式为'dd-MM' -YY HH24:MI'。所以你需要

    1. 确保数据和时间组件之间确实存在空格,并且

    2. 使“月份”组件匹配。