Se o valor for um número ou string, você poderá convertê-lo em uma data com uma máscara apropriada - que é o que está faltando e o que está causando o erro que está recebendo (já que está usando o
NLS_DATE_FORMAT
configuração, que aparentemente não corresponde ao formato dos dados; mas no qual você não deve confiar de qualquer maneira, como @MTO disse nos comentários):to_date(ID_BB_SECURITY, 'YYYYMMDD')
e então extraia o número do mês a partir desse:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Ou você pode simplesmente usar uma substring:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Eles assumem um formato consistente fixo, que é sempre uma suposição arriscada ao usar o tipo de dados errado. E se for um número, eles estão fazendo uma conversão implícita de número para string, que você pode transformar em uma conversão explícita para maior clareza.
Se já for uma data - como deveria ser, claro - então você não precisa da conversão:
select extract(month from ID_BB_SECURITY) from BT_EXPORT