Nếu giá trị là một số hoặc chuỗi thì bạn có thể chuyển đổi nó thành một ngày với một mặt nạ thích hợp - đó là thứ bạn đang thiếu và nguyên nhân gây ra lỗi mà bạn đang gặp phải (vì nó đang sử dụng mã NLS_DATE_FORMAT cài đặt, mà dường như không phù hợp với định dạng của dữ liệu; nhưng dù sao thì bạn cũng không nên dựa vào, như @MTO đã nói trong phần bình luận):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
và sau đó trích xuất số tháng từ đó:
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Hoặc bạn có thể chỉ sử dụng một chuỗi con:
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Những giả định này giả định một định dạng nhất quán cố định, luôn là một giả định rủi ro khi sử dụng sai kiểu dữ liệu. Trả lời nếu đó là một số, họ đang thực hiện chuyển đổi ngầm định từ số thành chuỗi, điều này bạn có thể chuyển thành chuyển đổi rõ ràng để rõ ràng hơn.
Nếu đó đã là một ngày - tất nhiên là như vậy - thì bạn không cần chuyển đổi:
select extract(month from ID_BB_SECURITY) from BT_EXPORT