sql >> Databasteknik >  >> RDS >> Oracle

Hur man infogar en tidsstämpel i Oracle i ett specifikt format

Du infogar inte en tidsstämpel i ett visst format. Tidsstämplar (och datum) lagras i databasen med hjälp av en intern representation, som är mellan 7 och 11 byte beroende på typ och precision. Det finns mer om det i den här frågan bland annat.

Din klient eller applikation bestämmer hur värdet ska visas i en strängform som kan läsas av människor.

När du gör det:

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

du konverterar implicit localtimestamp till en sträng genom att använda din sessions NLS-inställningar och sedan konvertera tillbaka den till en tidsstämpel. Det kan för övrigt ändra värdet - att förlora precision - men kommer inte att ändra hur värdet lagras internt. I ditt fall leder oöverensstämmelsen mellan NLS-inställningen och formatet du anger till ett ORA-01830-fel.

Så din första infogning är korrekt (förutsatt att du verkligen vill ha sessionstiden, inte servertiden). Om du vill se de lagrade värdena i ett visst format ändrar sedan antingen din klientsessions NLS-inställningar eller formaterar det helst explicit när du frågar efter det, t.ex.:

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


  1. Optimera borttagning på SQL Server

  2. MySQL LADDA DATAINFIL med PÅ DUBLIKATNYCKELUPPDATERING

  3. hur man väljer två kolumner från två tabeller i mysql

  4. Stäng anpassad typ i viloläge för att undvika 'Orsakas av:java.sql.SQLE Undantag:Stream har redan stängts'