Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como inserir um carimbo de data/hora no Oracle em um formato específico


Você não insere um carimbo de data/hora em um formato específico. Os carimbos de data e hora (e datas) são armazenados no banco de dados usando uma representação interna, que fica entre 7 e 11 bytes, dependendo do tipo e da precisão. Há mais sobre isso nesta pergunta , entre outros.

Seu cliente ou aplicativo decide como exibir o valor em um formato de string legível.

Quando você faz:
to_timestamp(localtimestamp,'YYYY/MM/DD')

você está convertendo implicitamente o localtimestamp para uma string, usando as configurações de NLS da sua sessão e, em seguida, convertendo-a de volta para um carimbo de data/hora. Isso pode acidentalmente alterar o valor - perdendo a precisão - mas não altera a forma como o valor é armazenado internamente. No seu caso, a incompatibilidade entre a configuração NLS e o formato que você está fornecendo está levando a um erro ORA-01830.

Portanto, sua primeira inserção está correta (supondo que você realmente queira a hora da sessão, não a hora do servidor). Se você quiser ver os valores armazenados em um formato específico, altere as configurações de NLS da sua sessão do cliente ou, de preferência, formate-o explicitamente quando você o consultar, por exemplo:
select to_char(time, 'YYYY-MM-DD HH24:MI:SS.FF3') from activity_log