sql >> Base de Datos >  >> RDS >> Oracle

Cómo extraer el número de mes de la fecha en Oracle

Si el valor es un número o una cadena, puede convertirlo en una fecha con una máscara adecuada, que es lo que se está perdiendo y lo que está causando el error que está obteniendo (ya que está usando el NLS_DATE_FORMAT configuración, que aparentemente no coincide con el formato de los datos; pero en el que no debe confiar de todos modos, como dijo @MTO en los comentarios):

to_date(ID_BB_SECURITY, 'YYYYMMDD')

y luego extraiga el número del mes de eso:

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

O simplemente podría usar una subcadena:

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

Esos asumen un formato consistente fijo, que siempre es una suposición arriesgada cuando se usa el tipo de datos incorrecto. Y si es un número, están haciendo una conversión implícita de número a cadena, que podría convertir en una conversión explícita para mayor claridad.

Si ya es una fecha, como debería ser, por supuesto, entonces no necesita la conversión:

select extract(month from ID_BB_SECURITY) from BT_EXPORT