Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Ý nghĩa của byte kết xuất (systimestamp) của Oracle

Có nhiều kiểu dữ liệu datetime bề ngoài giống nhau nhưng bên trong khác nhau. systimestamp là loại 188 (và có thông tin múi giờ); một ký tự dấu thời gian là loại 187 không có thông tin múi giờ và loại 188 với nó; và cột dấu thời gian thuần túy là loại 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                                 

Trong số đó, chỉ một cột dấu thời gian sử dụng định dạng nội bộ trong bài viết mà bạn đã liên kết đến, sử dụng ký hiệu vượt quá 100 cho năm.

Đối với những người khác, byte đầu tiên là một sửa đổi cơ sở 256 và byte thứ hai là cơ sở 256 năm; vì vậy bạn sẽ giải thích nó là

223 + (7 * 256) = 2015

Bạn có thể đọc thêm về bộ nhớ trong trong tài liệu Hỗ trợ Oracle của tôi 69028.1. Điều đó và câu trả lời trước đó được liên kết đến trong nhận xét, đề cập đến hai loại ngày, nhưng dấu thời gian được xử lý giống nhau theo giây và một số phần còn lại có thể được suy ra cho loại 187/188 - dù sao thì phần phân số-giây:

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?

Đối với loại 120, giây phân số giống nhau nhưng với các byte được đảo ngược.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. C #:Không thể truyền đối tượng từ DbNull sang các kiểu khác

  2. Tôi có thể sao chép:Bản ghi giả CŨ và:MỚI vào / vào một thủ tục được lưu trữ Oracle không?

  3. dừng lỗi biên dịch trong tập lệnh sqlplus

  4. Sự khác biệt giữa Hàm bảng và Hàm Pipelined?

  5. Cách kiểm tra cơ sở dữ liệu Oracle để tìm các truy vấn chạy dài