Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment insérer un horodatage dans Oracle dans un format spécifique

Vous n'insérez pas d'horodatage dans un format particulier. Les horodatages (et les dates) sont stockés dans la base de données à l'aide d'une représentation interne, comprise entre 7 et 11 octets selon le type et la précision. Il y a plus à ce sujet dans cette question , entre autres.

Votre client ou votre application décide comment afficher la valeur sous forme de chaîne lisible par l'homme.

Lorsque vous faites :

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

vous convertissez implicitement le localtimestamp en une chaîne, en utilisant les paramètres NLS de votre session, puis en la reconvertissant en horodatage. Cela peut incidemment modifier la valeur - perdre en précision - mais ne changera pas la façon dont la valeur est stockée en interne. Dans votre cas, la non-concordance entre le paramètre NLS et le format que vous fournissez entraîne une erreur ORA-01830.

Votre première insertion est donc correcte (en supposant que vous vouliez vraiment l'heure de la session, pas l'heure du serveur). Si vous voulez voir les valeurs stockées dans un format particulier, puis modifiez les paramètres NLS de votre session client, ou formatez-les de préférence explicitement lorsque vous l'interrogez, par exemple :

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