Ако стойността е число или низ, тогава можете да я преобразувате в дата с подходяща маска - което е това, което пропускате и какво причинява грешката, която получавате (тъй като използва NLS_DATE_FORMAT
на вашата сесия> настройка, която очевидно не отговаря на формата на данните; но на които така или иначе не трябва да разчитате, както каза @MTO в коментарите):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
и след това извлечете номера на месеца от това:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Или можете просто да използвате подниз:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Те предполагат фиксиран последователен формат, което винаги е рисковано допускане при използване на грешен тип данни. И ако това е число, те извършват неявно преобразуване от число в низ, което можете да превърнете в изрично преобразуване за по-голяма яснота.
Ако вече е дата - както трябва да бъде, разбира се - тогава нямате нужда от преобразуването:
select extract(month from ID_BB_SECURITY) from BT_EXPORT