Ошибки происходят из двух появлений этого пункта:
to_char('11/01/2018', 'MMDD')
Вы передаете строку в качестве первого аргумента ( не дата), и Oracle по умолчанию принимает значениепытаясь преобразовать эту строку в число, которое выдает ошибку, которую вы видите.
Вам необходимо либо указать фактическую дату, явно преобразовав строку:
to_char(to_date('11/01/2018', 'MM/DD/YYYY', 'MMDD')
или с помощьюЛитерал ANSI:
to_char(date '2018-11-01', 'MMDD')
или, если это действительно фиксированное значение, не преобразуйте его вообще, просто сделайте:
'1101'
или если вам передают эту строку из другого места -и вы, конечно, уверены в формате - мы substr()
извлекаем нужные вам биты, не пытаясь отбросить их через дату.
Между прочим, преобразование значений в даты и из них и объединение битов строквместе выглядит немного грязно и подвержен ошибкам.И если эта фиксированная дата всегда является первым в месяце, вы можете изменить выражение вашего дела, чтобы оно смотрело только на месяц, например, через extract()
.