Oracle
 sql >> база данни >  >> RDS >> Oracle

Значение на байтовете за изхвърляне (systimestamp) на Oracle

Има различни повърхностно подобни, но вътрешно различни типове данни за дата и време. systimestamp е тип 188 (и има информация за часовата зона); литералът за времеви отпечатък е тип 187 без информация за часовата зона и 188 с него; и обикновена колона с времеви печат е тип 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                                 

От тях само колона с времеви клеймо използва вътрешния формат в статията, към която сте се свързали, като се използва нотация с наднормено 100 за годината.

За останалите, първият байт е базова-256 модификатор, а вторият байт е базова 256 година; така че бихте го интерпретирали като

223 + (7 * 256) = 2015

Можете да прочетете повече за вътрешната памет в документа за поддръжка на My Oracle 69028.1. Това, както и по-ранният отговор, свързан към коментарите, се отнасят до двата типа дата, но времевите марки се третират еднакво до секундите, а някои от останалите могат да бъдат изведени за тип 187/188 - така или иначе частта с дробни секунди:

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?

За тип 120 дробните секунди са същите, но с обърнати байтове.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MyBatis RowBounds не ограничава резултатите от заявката

  2. Какво да направите, ако получите грешки при невъзможен отваряне на споделен обектен файл, когато използвате OCI версията Easysoft Oracle ODBC драйвер?

  3. Примери за синтаксис за присъединяване на oracle

  4. Как да получа идентификатор за последно вмъкване в Oracle с помощта на MyBatis?

  5. Как да използвате клауза за групово събиране с оператор SELECT INTO в базата данни на Oracle