Jika nilainya adalah angka atau string maka Anda dapat mengonversinya menjadi tanggal dengan topeng yang sesuai - yang Anda lewatkan, dan apa yang menyebabkan kesalahan yang Anda dapatkan (karena menggunakan NLS_DATE_FORMAT
pengaturan, yang ternyata tidak sesuai dengan format data; tetapi yang tidak boleh Anda andalkan, seperti yang dikatakan @MTO dalam komentar):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
lalu ekstrak nomor bulan dari itu:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Atau Anda bisa menggunakan substring:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Mereka mengasumsikan format tetap yang konsisten, yang selalu merupakan asumsi berisiko saat menggunakan tipe data yang salah. Dan jika itu adalah angka, mereka melakukan konversi implisit dari angka ke string, yang dapat Anda ubah menjadi konversi eksplisit untuk kejelasan yang lebih baik.
Jika sudah tanggal - sebagaimana mestinya, tentu saja - maka Anda tidak memerlukan konversi:
select extract(month from ID_BB_SECURITY) from BT_EXPORT