sql >> Database >  >> RDS >> Oracle

Betekenis van Oracle's dump (systimestamp) bytes

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.




  1. Hoe voeg ik opmerkingen toe aan een tabel in Oracle SQL Developer?

  2. Objecten filteren in SQL Server Management Studio (SSMS) - SQL Server / TSQL-zelfstudie, deel 19

  3. Vraag de externe-sleutelrelaties van een tabel op

  4. Na een impasse met één transactie in alle SQL Server-versies