Trong Cơ sở dữ liệu Oracle, FROM_TZ()
hàm chuyển đổi giá trị dấu thời gian và múi giờ thành TIMESTAMP WITH TIME ZONE
giá trị.
Bạn chuyển giá trị dấu thời gian và múi giờ làm hai đối số riêng biệt và hàm trả về chúng dưới dạng TIMESTAMP WITH TIME ZONE
giá trị.
Cú pháp
Cú pháp như sau:
FROM_TZ(timestamp_value, time_zone_value)
Ở đâu timestamp_value
là dấu thời gian và time_zone_value
là một chuỗi ký tự ở định dạng 'TZH:TZM'
hoặc một biểu thức ký tự trả về một chuỗi trong TZR
với TZD
tùy chọn định dạng.
Ví dụ
Đây là một ví dụ:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00')
FROM DUAL;
Kết quả:
01/JAN/30 12:30:35.000000000 PM -04:00
Chỉ định Khu vực Múi giờ
Dưới đây là một ví dụ sử dụng múi giờ thay vì chênh lệch múi giờ:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
FROM DUAL;
Kết quả:
01/JAN/30 12:30:35.000000000 PM AMERICA/ST_KITTS
Thay đổi Múi giờ
Bạn có thể sử dụng AT LOCAL
hoặc AT TIME ZONE
để thay đổi dấu thời gian kết quả thành một múi giờ khác.
Ví dụ:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT TIME ZONE 'Asia/Bangkok'
FROM DUAL;
Kết quả:
01/JAN/30 11:30:35.000000000 PM ASIA/BANGKOK
Và đây nó đang sử dụng AT LOCAL
:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'America/St_Kitts')
AT LOCAL
FROM DUAL;
Kết quả:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE
Bạn có thể sử dụng SESSIONTIMEZONE
chức năng kiểm tra múi giờ của phiên hiện tại và DBTIMEZONE
để kiểm tra múi giờ của cơ sở dữ liệu.
Múi giờ không hợp lệ
Vượt qua múi giờ không hợp lệ dẫn đến lỗi:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', 'Mars/Rover') FROM DUAL Error report - ORA-01882: timezone region not found
Bạn có thể nhận danh sách các khu vực múi giờ hợp lệ bằng cách truy vấn V$TIMEZONE_NAMES
xem.
Dưới đây là những gì sẽ xảy ra khi chúng tôi cung cấp chênh lệch múi giờ nằm ngoài phạm vi được chấp nhận:
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '+50:00') FROM DUAL Error report - ORA-01874: time zone hour must be between -15 and 15
Đối số rỗng
Chuyển null
đối với đối số đầu tiên dẫn đến lỗi:
SET NULL 'null';
SELECT
FROM_TZ(null, '+10:00')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT FROM_TZ(null, '+10:00') FROM DUAL Error at Command Line : 2 Column : 13 Error report - SQL Error: ORA-00932: inconsistent datatypes: expected TIMESTAMP got CHAR 00932. 00000 - "inconsistent datatypes: expected %s got %s" *Cause: *Action:
Chuyển null
đối với đối số thứ hai trả về null
:
SET NULL 'null';
SELECT
FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', null)
FROM DUAL;
Kết quả:
null
Lưu ý rằng theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Trong ví dụ trên, tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Số lượng đối số không hợp lệ
Việc chuyển một số lượng đối số không hợp lệ dẫn đến lỗi:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: