Si el valor es un número o una cadena, puede convertirlo en una fecha con una máscara adecuada, que es lo que se está perdiendo y lo que está causando el error que está obteniendo (ya que está usando el NLS_DATE_FORMAT
configuración, que aparentemente no coincide con el formato de los datos; pero en el que no debe confiar de todos modos, como dijo @MTO en los comentarios):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
y luego extraiga el número del mes de eso:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
O simplemente podría usar una subcadena:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Esos asumen un formato consistente fijo, que siempre es una suposición arriesgada cuando se usa el tipo de datos incorrecto. Y si es un número, están haciendo una conversión implícita de número a cadena, que podría convertir en una conversión explícita para mayor claridad.
Si ya es una fecha, como debería ser, por supuesto, entonces no necesita la conversión:
select extract(month from ID_BB_SECURITY) from BT_EXPORT