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

4 cách để thay đổi múi giờ trong Oracle

Trong Cơ sở dữ liệu Oracle, múi giờ có thể được đặt ở nhiều nơi khác nhau. Dưới đây là bốn cách để thay đổi múi giờ khi sử dụng Oracle.

Đặt Múi giờ cho Cơ sở dữ liệu

Bạn có thể đặt múi giờ cơ sở dữ liệu khi tạo cơ sở dữ liệu. Để thực hiện việc này, hãy sử dụng SET TIME_ZONE mệnh đề của CREATE DATABASE tuyên bố.

Ví dụ:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Trong trường hợp này, tôi đã sử dụng tên khu vực múi giờ. Xem Cách Trả lại Danh sách Múi Giờ Hợp lệ trong Cơ sở dữ liệu Oracle để có danh sách đầy đủ các tên vùng hợp lệ trên hệ thống của bạn.

Ngoài ra, bạn có thể sử dụng độ lệch múi giờ thực tế:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='+10:00';

Nếu bạn không đặt múi giờ một cách rõ ràng khi tạo cơ sở dữ liệu, thì múi giờ đó sẽ được đặt mặc định thành múi giờ của hệ điều hành của máy chủ.

Bạn cũng có thể thay đổi cài đặt múi giờ hiện tại cho cơ sở dữ liệu. Để thực hiện việc này, hãy sử dụng ALTER DATABASE tuyên bố.

Ví dụ:

ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Lưu ý rằng múi giờ cơ sở dữ liệu chỉ phù hợp với TIMESTAMP WITH LOCAL TIME ZONE cột. Ngoài ra, Oracle khuyên bạn nên đặt múi giờ cơ sở dữ liệu thành UTC (0:00) để tránh chuyển đổi dữ liệu và cải thiện hiệu suất khi dữ liệu được chuyển giữa các cơ sở dữ liệu.

Đặt múi giờ của phiên

Bạn có thể đặt múi giờ phiên độc lập với múi giờ cơ sở dữ liệu. Khi bạn quay lại TIMESTAMP WITH LOCAL TIME ZONE dữ liệu được trả về theo múi giờ của phiên hiện tại.

Múi giờ của phiên cũng có hiệu lực khi TIMESTAMP giá trị được chuyển đổi thành TIMESTAMP WITH TIME ZONE hoặc TIMESTAMP WITH LOCAL TIME ZONE kiểu dữ liệu.

Bạn có thể thực hiện một số việc để đặt múi giờ ở cấp phiên.

T he ORA_SDTZ Biến môi trường

Bạn có thể đặt múi giờ phiên bằng ORA_SDTZ biến môi trường. Điều này có thể được đặt thành các giá trị sau:

  • Múi giờ địa phương của hệ điều hành ('OS_TZ' )
  • Múi giờ cơ sở dữ liệu ('DB_TZ' )
  • Chênh lệch tuyệt đối so với UTC (ví dụ:'-04:00' )
  • Tên khu vực múi giờ (ví dụ:'America/St_Kitts' )

Dưới đây là một số ví dụ về cách đặt biến môi trường này trong môi trường UNIX:

% setenv ORA_SDTZ 'OS_TZ'
% setenv ORA_SDTZ 'DB_TZ'
% setenv ORA_SDTZ 'America/St_Kitts'
% setenv ORA_SDTZ '-04:00'

Giá trị mặc định của ORA_SDTZ biến là 'OD_TZ' . Giá trị này được sử dụng khi biến không được đặt hoặc được đặt thành giá trị không hợp lệ.

ALTER SESSION Tuyên bố

Bạn có thể thay đổi múi giờ cho một phiên SQL cụ thể bằng SET TIME_ZONE mệnh đề của ALTER SESSION tuyên bố.

TIME_ZONE có thể được đặt thành các giá trị sau:

  • Múi giờ địa phương mặc định khi phiên bắt đầu (local )
  • Múi giờ cơ sở dữ liệu (dbtimezone )
  • Chênh lệch tuyệt đối so với UTC (ví dụ:'-04:00' )
  • Tên khu vực múi giờ (ví dụ:'Canada/Eastern' )

Đây là ví dụ về cài đặt TIME_ZONE thành các giá trị như vậy:

ALTER SESSION SET TIME_ZONE=local;
ALTER SESSION SET TIME_ZONE=dbtimezone;
ALTER SESSION SET TIME_ZONE='Canada/Eastern';
ALTER SESSION SET TIME_ZONE='-04:00';

Bạn có thể kiểm tra múi giờ của phiên hiện tại của mình bằng SESSIONTIMEZONE chức năng.

Ví dụ:

SELECT SESSIONTIMEZONE FROM DUAL;

Kết quả:

Australia/Brisbane 

Trong trường hợp của tôi, múi giờ phiên được đặt thành Úc / Brisbane.

AT TIME ZONE Mệnh đề

Biểu thức ngày giờ có thể bao gồm AT LOCAL hoặc một AT TIME ZONE mệnh đề. Nếu bạn bao gồm một AT LOCAL , thì kết quả được trả về trong múi giờ phiên hiện tại. Nếu bạn bao gồm AT TIME ZONE , thì múi giờ có thể là một trong những điều sau:

  • Chênh lệch múi giờ
  • Tên khu vực múi giờ
  • DBTIMEZONE (hàm này trả về múi giờ của cơ sở dữ liệu)
  • SESSIONTIMEZONE (hàm này trả về múi giờ của phiên hiện tại)
  • Một biểu thức trả về một chuỗi ký tự có định dạng múi giờ hợp lệ.

Ví dụ:

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT TIME ZONE '+12:00'
FROM DUAL;

Kết quả:

02/JAN/30 04:30:35.000000000 AM +12:00

Trong trường hợp này, tôi đã sử dụng FROM_TZ() chức năng chuyển đổi giá trị dấu thời gian và múi giờ thành TIMESTAMP WITH TIME ZONE giá trị. Sau đó, tôi đã sử dụng AT TIME ZONE mệnh đề để chỉ định một múi giờ khác.

Đây là ví dụ tương tự, ngoại trừ lần này tôi chỉ định AT LOCAL :

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT LOCAL
FROM DUAL;

Kết quả:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-04021:xảy ra thời gian chờ trong khi chờ khóa đối tượng

  2. Thủ tục được lưu trữ trong Oracle Ví dụ với tham số IN OUT

  3. Cách xóa Máy ảo khỏi VirtualBox

  4. Lỗi khi tải oci8.so với máy chủ Ubuntu 17.04 php 7 và apache2

  5. PL / SQL, làm thế nào để thoát khỏi dấu nháy đơn trong một chuỗi?