Er zijn verschillende oppervlakkig vergelijkbare maar intern verschillende datetime datatypes. systimestamp
is type 188 (en heeft tijdzone-informatie); een letterlijke tijdstempel is type 187 zonder tijdzone-info en 188 ermee; en een gewone tijdstempelkolom is type 180:
select dump(systimestamp) from dual;
DUMP(SYSTIMESTAMP)
--------------------------------------------------------------------------------
Typ=188 Len=20: 223,7,7,31,9,50,28,11,128,203,79,35,1,0,5,0,0,0,0,0
select dump(timestamp '2015-07-31 08:55:06.157047 +00:00') from dual;
DUMP(TIMESTAMP'2015-07-3108:55:06.157047+00:00')
---------------------------------------------------------------
Typ=188 Len=20: 223,7,7,31,8,55,6,0,216,88,92,9,0,0,5,0,0,0,0,0
select dump(timestamp '2015-07-31 08:55:06.157047') from dual;
DUMP(TIMESTAMP'2015-07-3108:55:06.157047')
---------------------------------------------------------------
Typ=187 Len=20: 223,7,7,31,8,55,6,0,216,88,92,9,0,0,3,0,0,0,0,0
create table t (ts timestamp);
insert into t (ts) values (timestamp '2015-07-31 08:55:06.157047');
select dump(ts) from t;
DUMP(TS)
--------------------------------------------------------------------------------
Typ=180 Len=11: 120,115,7,31,9,56,7,9,92,88,216
Daarvan gebruikt alleen een tijdstempelkolom het interne formaat in het artikel waarnaar u heeft gelinkt, met gebruikmaking van de overschrijding-100-notatie voor het jaar.
Voor de anderen is de eerste byte een base-256-modifier en de tweede byte is het basisjaar van 256; dus je zou het interpreteren als
223 + (7 * 256) = 2015
U kunt meer lezen over de interne opslag in My Oracle Support document 69028.1. Dat, en het eerdere antwoord waarnaar in opmerkingen is gelinkt, verwijst naar de twee datumtypen, maar tijdstempels worden tot op de seconde gelijk behandeld, en een deel van de rest kan worden afgeleid voor type 187/188 - het gedeelte met breuken in ieder geval:
Byte 1 - Base 256 year modifier: 223
2 - Base 256 year: 7 (256 * 7 = 1792 + 223 = 2015)
3 - Month: 7
4 - Day: 31
5 - Hours: 8
6 - Minutes: 55
7 - Seconds: 6
8 - Unused?
9 - Base 256 nanoseconds: 216
10 - Base 256 ns modifier 1: 256 * 88 = 22528
11 - Base 256 ns modifier 2: 256 * 256 * 92 = 6029312
12 - Base 256 ns modifier 3: 256 * 256 * 256 * 9 = 150994944
=> actual nanoseconds = 216 + 22528 + 6029312 + 150994944
=> 157047000
13-20 - Time zone data?
Voor type 120 zijn de fractionele seconden hetzelfde, maar met de bytes omgekeerd.