値が数値または文字列の場合は、適切なマスクを使用して日付に変換できます。これは、欠落しているものであり、発生しているエラーの原因です(セッションの 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