Oracle
 sql >> Database >  >> RDS >> Oracle

Come estrarre il numero del mese dalla data in Oracle

Se il valore è un numero o una stringa, puoi convertirlo in una data con una maschera appropriata, che è ciò che ti manca e la causa dell'errore che stai ricevendo (poiché utilizza il NLS_DATE_FORMAT impostazione, che apparentemente non corrisponde al formato dei dati; ma su cui non dovresti comunque fare affidamento, come ha detto @MTO nei commenti):

to_date(ID_BB_SECURITY, 'YYYYMMDD')

e quindi estraete il numero del mese da quello:

select extract(month from to_date(ID_BB_SECURITY, 'YYYYMMDD')) from BT_EXPORT

Oppure potresti semplicemente usare una sottostringa:

select to_number(substr(ID_BB_SECURITY, 5, 2)) from BT_EXPORT;

Quelli presuppongono un formato coerente fisso, che è sempre un presupposto rischioso quando si utilizza il tipo di dati sbagliato. Inoltre, se è un numero, stanno eseguendo una conversione implicita da numero a stringa, che potresti trasformare in una conversione esplicita per maggiore chiarezza.

Se è già una data - come dovrebbe essere, ovviamente - allora non è necessaria la conversione:

select extract(month from ID_BB_SECURITY) from BT_EXPORT