Als de waarde een getal of tekenreeks is, kunt u deze converteren naar een datum met een geschikt masker - dat is wat u mist en wat de fout veroorzaakt die u krijgt (omdat het de NLS_DATE_FORMAT
instelling, die blijkbaar niet overeenkomt met het formaat van de gegevens; maar waar je sowieso niet op moet vertrouwen, zoals @MTO zei in opmerkingen):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
en dan het maandnummer extraheren daaruit:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Of je kunt gewoon een substring gebruiken:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Die gaan uit van een vast consistent formaat, wat altijd een riskante aanname is bij het gebruik van het verkeerde datatype. En als het een getal is, doen ze een impliciete conversie van getal naar tekenreeks, die je zou kunnen omzetten in een expliciete conversie voor meer duidelijkheid.
Als het al een datum is - zoals het natuurlijk zou moeten zijn - dan heb je de conversie niet nodig:
select extract(month from ID_BB_SECURITY) from BT_EXPORT