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

Hàm FROM_TZ () trong Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Người dùng lược đồ Oracle không thể tạo bảng trong thủ tục

  2. ORA-01036:tên / số biến không hợp lệ khi chạy truy vấn thông qua C #

  3. Bật SSL hoặc TLS trong Oracle Apps R12

  4. Làm cách nào để đặt vùng múi giờ cho Kết nối JDBC và tránh không tìm thấy vùng múi giờ SqlException?

  5. Làm cách nào để chia một cột varchar thành nhiều giá trị trong SQL?