Wenn der Wert eine Zahl oder eine Zeichenfolge ist, können Sie ihn mit einer geeigneten Maske in ein Datum konvertieren - was Ihnen fehlt und was den Fehler verursacht, den Sie erhalten (da es den NLS_DATE_FORMAT
Einstellung, die anscheinend nicht zum Format der Daten passt; aber worauf Sie sich sowieso nicht verlassen sollten, wie @MTO in Kommentaren sagte):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
und dann extrahieren Sie die Monatsnummer daraus:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Oder Sie könnten einfach einen Teilstring verwenden:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Diese gehen von einem festen konsistenten Format aus, was bei Verwendung des falschen Datentyps immer eine riskante Annahme ist. Und wenn es sich um eine Zahl handelt, führen sie eine implizite Konvertierung von einer Zahl in eine Zeichenfolge durch, die Sie zur besseren Übersichtlichkeit in eine explizite Konvertierung umwandeln könnten.
Wenn es schon ein Datum ist - wie es natürlich sein sollte - dann brauchst du die Konvertierung nicht:
select extract(month from ID_BB_SECURITY) from BT_EXPORT