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

Cómo insertar una marca de tiempo en Oracle en un formato específico

No inserta una marca de tiempo en un formato particular. Las marcas de tiempo (y fechas) se almacenan en la base de datos mediante una representación interna, que oscila entre 7 y 11 bytes, según el tipo y la precisión. Hay más sobre eso en esta pregunta , entre otros.

Su cliente o aplicación decide cómo mostrar el valor en una forma de cadena legible por humanos.

Cuando lo haces:

to_timestamp(localtimestamp,'YYYY/MM/DD')

estás convirtiendo implícitamente el localtimestamp a una cadena, usando la configuración NLS de su sesión y luego volviéndola a convertir en una marca de tiempo. Eso, por cierto, puede cambiar el valor, perdiendo precisión, pero no cambiará la forma en que el valor se almacena internamente. En su caso, la discrepancia entre la configuración de NLS y el formato que proporciona genera un error ORA-01830.

Entonces, su primera inserción es correcta (suponiendo que realmente desea la hora de la sesión, no la hora del servidor). Si quieres ver los valores almacenados en un formato particular, luego cambie la configuración NLS de la sesión de su cliente, o preferiblemente formatéelo explícitamente cuando lo consulte, por ejemplo:

select to_char(time, 'YYYY-MM-DD HH24:MI:SS.FF3') from activity_log