Pokud je hodnotou číslo nebo řetězec, můžete ji převést na datum pomocí vhodné masky – což je to, co vám chybí a co způsobuje chybu, kterou dostáváte (protože používá NLS_DATE_FORMAT
nastavení, které zjevně neodpovídá formátu dat; ale na které byste se stejně neměli spoléhat, jak řekl @MTO v komentářích):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
a poté extrahujte číslo měsíce z toho:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Nebo můžete použít pouze podřetězec:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Ty předpokládají pevný konzistentní formát, což je vždy riskantní předpoklad při použití nesprávného datového typu. Pokud se jedná o číslo, provádějí implicitní převod z čísla na řetězec, který byste pro větší přehlednost mohli převést na explicitní převod.
Pokud je to již datum – jak by samozřejmě mělo být – pak převod nepotřebujete:
select extract(month from ID_BB_SECURITY) from BT_EXPORT