Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Znaczenie bajtów dump(systimestamp) Oracle

Istnieją różne powierzchownie podobne, ale wewnętrznie różne typy danych typu date-time. systimestamp jest typu 188 (i zawiera informacje o strefie czasowej); literał znacznika czasu to typ 187 bez informacji o strefie czasowej i 188 z nim; a zwykła kolumna sygnatury czasowej ma typ 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                                 

Spośród nich tylko kolumna sygnatury czasowej używa wewnętrznego formatu artykułu, do którego prowadzisz link, przy użyciu notacji nadwyżki 100 dla roku.

Dla pozostałych pierwszy bajt to modyfikator o podstawie 256, a drugi bajt to rok o podstawie 256; więc zinterpretowałbyś to jako

223 + (7 * 256) = 2015

Więcej informacji na temat pamięci wewnętrznej można znaleźć w dokumencie 69028.1 My Oracle Support. To i wcześniejsza odpowiedź, do której prowadzą odnośniki w komentarzach, odnoszą się do dwóch typów dat, ale znaczniki czasu są traktowane tak samo co do sekund, a część reszty można wywnioskować dla typu 187/188 - i tak część ułamków sekund:

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?

Dla typu 120 ułamki sekund są takie same, ale z odwróconymi bajtami.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. co dzieje się w fazie adop przygotuj

  2. Wybierz N-ty wiersz z tabeli w Oracle

  3. ORA-00979 nie jest grupą według wyrażenia

  4. Uruchom szachownicę

  5. Wyjaśnienie operatora Oracle MINUS