Преобразование varchar в метку времени в oracle 11g R2

Я пытаюсь преобразовать 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

дата_возрождения: varchar2

Но это дает мне ошибку, например: Invalid number

Что происходит не так?


person Ravi Parmar    schedule 06.05.2013    source источник
comment
Почему вы конвертируете столбец varchar в varchar, используя to_char()?   -  person a_horse_with_no_name    schedule 06.05.2013


Ответы (1)


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

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

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

    2. Сделайте так, чтобы компонент "месяц" совпадал.

person Colin 't Hart    schedule 06.05.2013