Si la valeur est un nombre ou une chaîne, vous pouvez la convertir en une date avec un masque approprié - c'est ce qui vous manque et ce qui cause l'erreur que vous obtenez (car il utilise le NLS_DATE_FORMAT
paramètre, qui ne correspond apparemment pas au format des données ; mais sur lequel vous ne devriez pas vous fier de toute façon, comme @MTO l'a dit dans les commentaires):
to_date(ID_BB_SECURITY, 'YYYYMMDD')
puis extraire le numéro du mois à partir de là :
select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT
Ou vous pouvez simplement utiliser une sous-chaîne :
select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;
Ceux-ci supposent un format cohérent fixe, ce qui est toujours une hypothèse risquée lors de l'utilisation du mauvais type de données. Et s'il s'agit d'un nombre, ils effectuent une conversion implicite de nombre en chaîne, que vous pouvez transformer en une conversion explicite pour plus de clarté.
S'il s'agit déjà d'une date - comme il se doit, bien sûr - alors vous n'avez pas besoin de la conversion :
select extract(month from ID_BB_SECURITY) from BT_EXPORT