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

Come inserire un timestamp in Oracle in un formato specifico

Non inserisci un timestamp in un formato particolare. I timestamp (e le date) vengono archiviati nel database utilizzando una rappresentazione interna, che è compresa tra 7 e 11 byte a seconda del tipo e della precisione. C'è di più in questa domanda , tra gli altri.

Il tuo client o applicazione decide come visualizzare il valore in un formato di stringa leggibile dall'uomo.

Quando lo fai:

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

stai convertendo implicitamente il localtimestamp in una stringa, utilizzando le impostazioni NLS della sessione e quindi riconvertendolo in un timestamp. Ciò potrebbe accidentalmente modificare il valore, perdendo precisione, ma non cambierà il modo in cui il valore viene archiviato internamente. Nel tuo caso, la mancata corrispondenza tra l'impostazione NLS e il formato che stai fornendo sta portando a un errore ORA-01830.

Quindi il tuo primo inserimento è corretto (supponendo che tu voglia davvero l'ora della sessione, non l'ora del server). Se vuoi vedere i valori archiviati in un formato particolare, quindi modificano le impostazioni NLS della sessione client o, preferibilmente, formattano esplicitamente quando lo si interroga, ad esempio:

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