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

Làm thế nào để thu thập múi giờ của hệ điều hành từ cơ sở dữ liệu Oracle ở định dạng chuỗi? (Di chuyển / chuyển đổi ngày sang ts với tz)

Nếu dữ liệu đã có trong bảng Oracle SQL và bạn phải chuyển đổi sang dấu thời gian với múi giờ (ví dụ:trong cột mới bạn đã tạo trong cùng một bảng), bạn không cần phải chuyển đến Hệ điều hành một cách rõ ràng hoặc sử dụng Java hoặc bất kỳ thứ gì khác, ngoài chính cơ sở dữ liệu Oracle.

Không rõ từ câu hỏi của bạn nếu bạn phải giả định "ngày" được cho là nằm trong múi giờ máy chủ (bạn đề cập đến "cơ sở dữ liệu" thường có nghĩa là máy chủ) hay múi giờ máy khách (bạn đề cập đến "phiên" có nghĩa là khách hàng). Dù bằng cách nào:

update <your_table>
set <timestamp_with_time_zone_col> = 
            from_tz(cast<date_col> as timestamp, dbtimezone)
;

hoặc sử dụng sessiontimezone là đối số thứ hai, nếu đó là những gì bạn cần.

Điều này giả định rằng múi giờ của cơ sở dữ liệu (và / hoặc phiên) được thiết lập đúng cách trong db, tương ứng trong máy khách. Nếu nó không phải / chúng không, điều đó cần được khắc phục trước tiên. Oracle hoàn toàn có khả năng xử lý thời gian tiết kiệm ban ngày, nếu các thông số được thiết lập chính xác ngay từ đầu. (Và nếu không, không rõ tại sao bạn lại cố gắng làm cho hoạt động của mình "đúng hơn" so với cơ sở dữ liệu hỗ trợ ngay từ đầu.)

Ví dụ:trong mệnh đề VỚI bên dưới, tôi mô phỏng một bảng có cột dt trong kiểu dữ liệu date . Sau đó, tôi chuyển đổi đó thành timestamp with time zone , theo múi giờ của phiên (khách hàng) của tôi.

with
  my_table ( dt ) as ( 
    select to_date('2018-06-20 14:30:00', 'yyyy-mm-dd hh24:mi:ss') from dual 
  )
select dt,
       from_tz(cast(dt as timestamp), sessiontimezone) as ts_with_tz
from   my_table
;

DT                  TS_WITH_TZ                                       
------------------- -------------------------------------------------
2018-06-20 14:30:00 2018-06-20 14:30:00.000000000 AMERICA/LOS_ANGELES


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa các hàng khớp với chuỗi con với LIKE?

  2. Gặp lỗi ORA - 00907 ở phần sau khi BẬT CẬP NHẬT

  3. Lỗi:Mã hóa ký tự không tương thích:UTF-8 và ASCII-8BIT

  4. Làm cách nào để bỏ qua dấu và trong tập lệnh SQL chạy từ SQL Plus?

  5. Tôi có thể cài đặt JDK 1.6 trên JDK 1.3 mặc định của cơ sở dữ liệu Oracle không?