Dưới đây là ba cách để trả về thông tin múi giờ từ một giá trị ngày giờ trong Cơ sở dữ liệu Oracle.
EXTRACT()
Chức năng
EXTRACT(datetime)
hàm được sử dụng để trích xuất các phần datetime khác nhau từ một giá trị datetime. Điều này bao gồm thông tin múi giờ.
Đây là một ví dụ:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
Kết quả:
Australia/Darwin
Trong trường hợp này, tôi đã sử dụng TIMEZONE_REGION
đối số để trích xuất vùng múi giờ.
Các đối số có sẵn để trích xuất thông tin múi giờ khác nhau là:
-
TIMEZONE_HOUR
-
TIMEZONE_MINUTE
-
TIMEZONE_REGION
-
TIMEZONE_ABBR
Cũng có thể sử dụng TIMEZONE_OFFSET
, mặc dù điều này không xuất hiện trong cú pháp tài liệu của Oracle cho hàm này.
Dưới đây là một ví dụ về cách lấy từ viết tắt của múi giờ:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
Kết quả:
ACST
Lưu ý rằng, khi sử dụng các đối số múi giờ ở trên, giá trị ngày giờ phải đánh giá thành biểu thức của kiểu dữ liệu TIMESTAMP WITH TIME ZONE
hoặc TIMESTAMP WITH LOCAL TIME ZONE
.
EXTRACT()
hàm cũng chấp nhận các đối số cho các phần datetime khác, chẳng hạn như YEAR
, MONTH
, HOUR
, v.v.
TO_CHAR(datetime)
Chức năng
Chúng tôi cũng có thể sử dụng TO_CHAR(datetime)
hoạt động như một phương pháp thay thế để nhận thông tin múi giờ từ giá trị ngày giờ.
Hàm này chấp nhận giá trị ngày giờ hoặc khoảng thời gian làm đối số đầu tiên và mô hình định dạng làm đối số thứ hai. Sau đó, hàm chuyển đổi giá trị thành kiểu dữ liệu VARCHAR2
ở định dạng được chỉ định.
Mô hình định dạng chỉ định định dạng để trả về giá trị ngày giờ / khoảng thời gian. Mô hình định dạng bao gồm một hoặc nhiều phần tử định dạng. Điều này cho phép chúng tôi tạo ra các kết quả một cách cẩn thận để phản ánh định dạng mong muốn của chúng tôi.
Nếu chúng tôi chỉ muốn trả lại thông tin múi giờ, chúng tôi có thể sử dụng một trong các yếu tố định dạng cho mục đích cụ thể đó.
Có một vài yếu tố định dạng khác nhau mà chúng tôi có thể sử dụng khi trả về thông tin múi giờ từ một giá trị ngày giờ.
Hãy bắt đầu với TZR
phần tử định dạng:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
Kết quả:
AUSTRALIA/DARWIN
Phần tử định dạng này trả về khu vực múi giờ. Nếu giá trị ngày giờ chỉ bao gồm độ lệch múi giờ, thì giá trị đó sẽ được trả về thay thế.
TZD
phần tử định dạng có thể được sử dụng để trả về thông tin tiết kiệm ánh sáng ban ngày. Nó trả về thông tin múi giờ ở dạng viết tắt.
Ví dụ:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
Kết quả:
ACST
Ngoài ra, chúng ta có thể sử dụng TZH
và TZM
các phần tử định dạng để trả về giờ và phút của múi giờ, dựa trên độ lệch múi giờ.
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL;
Kết quả:
+09:30
TZ_OFFSET()
Chức năng
TZ_OFFSET()
hàm trả về độ lệch múi giờ tương ứng với đối số dựa trên ngày câu lệnh được thực thi.
Đây là một ví dụ về việc sử dụng TZ_OFFSET()
để trả về độ lệch múi giờ dựa trên vùng múi giờ được trả về bởi EXTRACT()
chức năng:
SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;
Kết quả:
+09:30
Chúng tôi cũng có thể chuyển SESSIONTIMEZONE
hoặc DBTIMEZONE
thành TZ_OFFSET()
để trả về múi giờ của phiên hiện tại và cơ sở dữ liệu của chúng tôi tương ứng:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
Kết quả:
Session DB __________ _________ +10:00 +00:00