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

Sådan indsætter du et tidsstempel i Oracle i et bestemt format

Du indsætter ikke et tidsstempel i et bestemt format. Tidsstempler (og datoer) gemmes i databasen ved hjælp af en intern repræsentation, som er mellem 7 og 11 bytes afhængig af type og præcision. Der er mere om det i dette spørgsmål blandt andre.

Din klient eller applikation bestemmer, hvordan værdien skal vises i en strengform, der kan læses af mennesker.

Når du gør:

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

du konverterer implicit localtimestamp til en streng ved at bruge din sessions NLS-indstillinger og derefter konvertere den tilbage til et tidsstempel. Det kan i øvrigt ændre værdien - miste præcision - men vil ikke ændre, hvordan værdien lagres internt. I dit tilfælde fører misforholdet mellem NLS-indstillingen og det format, du angiver, til en ORA-01830-fejl.

Så din første indsættelse er korrekt (forudsat at du virkelig vil have sessionstiden, ikke servertiden). Hvis du vil se de lagrede værdier i et bestemt format, så ændrer du enten din klientsessions NLS-indstillinger, eller formaterer det helst eksplicit, når du forespørger på det, f.eks.:

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


  1. Hvordan oversætter man PostgreSQL array_agg-funktionen til SQLite?

  2. Oracle APEX - SQL - Oprettelse af en sekventiel historie og beregning af dage mellem hver fase

  3. hvordan man sender brugeroprettet forbindelse til dvale

  4. Gem tidsinterval i PostgreSQL fra Rails