Ошибка to_date при использовании substr

Когда я запускаю:

select to_date('substr(21120319,3)','YYMMDD') from dual 

Я получаю сообщение об ошибке:

дата не находится в допустимом диапазоне -4719 и +9999.

Но если:

 select to_date('120319','YYMMDD') from dual 

мой запрос работает нормально и дает выход 19-MAR-12.

В чем причина этой ошибки. Пожалуйста, помогите мне понять это.

Спасибо за ваше время.

вам нужно удалить substr из строкового литерала.

 select to_date(substr('21120319', 3),'YYMMDD') from dual ; 
 select to_date('substr(21120319,3)','YYMMDD') from dual ; 

теперь substr(21120319,3) также является частью строки

измените его на

  select to_date(substr('21120319',3),'YYMMDD') from dual ; 

Вам, вероятно, нужно

 select to_date('21120319','YYYYMMDD') from dual 

Нет необходимости в substr, он вернет неправильный век, 21120319 должен вернуться 19 марта 2112 года не 19 марта 2012 года.