Se il valore è un numero o una stringa, puoi convertirlo in una data con una maschera appropriata, che è ciò che ti manca e la causa dell'errore che stai ricevendo (poiché utilizza il NLS_DATE_FORMAT
impostazione, che apparentemente non corrisponde al formato dei dati; ma su cui non dovresti comunque fare affidamento, come ha detto @MTO nei commenti):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
e quindi estraete il numero del mese da quello:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Oppure potresti semplicemente usare una sottostringa:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Quelli presuppongono un formato coerente fisso, che è sempre un presupposto rischioso quando si utilizza il tipo di dati sbagliato. Inoltre, se è un numero, stanno eseguendo una conversione implicita da numero a stringa, che potresti trasformare in una conversione esplicita per maggiore chiarezza.
Se è già una data - come dovrebbe essere, ovviamente - allora non è necessaria la conversione:
select extract(month from ID_BB_SECURITY) from BT_EXPORT