2013-05-06 2 views
0

Я пытаюсь преобразовать varchar в timestamp с ниже запроса.Преобразование varchar в timestamp в oracle 11g 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 в VARCHAR, используя 'to_char()'? –

ответ

2
  1. revival_date является VARCHAR (потому что иногда он может, по-видимому содержать «Unknown», так что не имеет смысла использовать to_char() на нем.

  2. При переходе на отметку времени формат должен соответствовать дате хранится как строка. В вашем случае вы пытаетесь сделать что-то в формате «dd-MON-YYHH24: MI» (без пробела между компонентами даты и времени) и сообщать to_timestamp, чтобы ожидать строки в формате «dd-MM» -YY HH24: MI '. Таким образом, вам необходимо

    1. Убедитесь, что между данными и компонентами времени действительно имеется пробел, и

    2. Составьте компонент «месяц».