Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Arti dari byte dump(systimestamp) Oracle

Ada berbagai tipe data datetime yang mirip tetapi secara internal berbeda. systimestamp adalah tipe 188 (dan memiliki informasi zona waktu); literal timestamp adalah tipe 187 tanpa info zona waktu dan 188 dengannya; dan kolom stempel waktu biasa adalah tipe 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                                 

Dari jumlah tersebut, hanya kolom stempel waktu yang menggunakan format internal dalam artikel yang Anda tautkan, menggunakan notasi 100 berlebih untuk tahun tersebut.

Untuk yang lain, byte pertama adalah pengubah basis-256, dan byte kedua adalah basis 256 tahun; jadi Anda akan menafsirkannya sebagai

223 + (7 * 256) = 2015

Anda dapat membaca lebih lanjut tentang penyimpanan internal di dokumen Dukungan Oracle Saya 69028.1. Itu, dan jawaban sebelumnya yang ditautkan dalam komentar, merujuk ke dua jenis tanggal, tetapi stempel waktu diperlakukan sama hingga detik, dan beberapa sisanya dapat disimpulkan untuk tipe 187/188 - bagian pecahan-detik tetap:

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?

Untuk tipe 120, pecahan detiknya sama tetapi dengan byte terbalik.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berapa banyak indeks database yang terlalu banyak?

  2. Bagaimana saya bisa menghasilkan (atau mendapatkan) skrip ddl pada tabel yang ada di Oracle? Saya harus membuatnya kembali di Hive

  3. Bagaimana cara mendapatkan baris terakhir dari tabel Oracle

  4. Bagaimana cara membuat aplikasi Java saya mengidentifikasi dirinya ke Oracle saat terhubung?

  5. Fungsi SQRT() di Oracle