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

Nhận Giờ địa phương hiện tại của bất kỳ quốc gia nào trong PL / SQL

Thông thường, chúng tôi đã sử dụng Google để kiểm tra giờ địa phương hiện tại của bất kỳ quốc gia nào. Trong bài đăng này, tôi đưa ra một ví dụ, cách bạn có thể lấy giờ địa phương hiện tại của bất kỳ quốc gia nào trong PL / SQL. Bạn có thể nhận danh sách tên quốc gia thông qua V $ TIMEZONE_NAMES xem trong Oracle. Tôi đang sử dụng chế độ xem từ điển này để lấy tên quốc gia và sử dụng hàm TZ_OFFSET để nhận giá trị múi giờ cho quốc gia cụ thể.

Sau khi nhận được tên quốc gia và giá trị múi giờ, bạn có thể sử dụng lệnh Alter Session để đặt múi giờ của phiên hiện tại. Sau đó, bạn có thể lấy Current_Timestamp để xem giờ địa phương hiện tại của quốc gia đó . Dưới đây tôi sẽ đưa ra ví dụ từng bước.

Trước tiên, hãy truy vấn chế độ xem V $ TIMEZONE_NAMES bằng cách sử dụng hàm TZ_OFFSET để kiểm tra tên quốc gia và múi giờ của họ, như được minh họa trong ví dụ dưới đây:

 SELECT DISTINCT tzname, TZ_OFFSET (tzname)
 FROM V$TIMEZONE_NAMES
ORDER BY tzname;

Bạn sẽ nhận được khoảng 577 hàng như sau:

America/Mexico_City -05:00 
America/Miquelon -02:00 
America/Moncton -03:00 
America/Monterrey -05:00 
America/Montevideo -03:00 
America/Montreal -04:00 
America/Montserrat -04:00 
America/Nassau -04:00 
America/New_York -04:00

Bây giờ nếu bạn muốn biết giờ địa phương hiện tại ở New York. Sau đó, bạn chạy lệnh Alter Session sau với giá trị Múi giờ của New York, là -04:00. Như hình dưới đây:

ALTER SESSION SET time_zone = '-04:00';

Sau đó, hãy truy vấn như bên dưới để lấy giờ địa phương hiện tại của New York.

SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM') c_time
 FROM DUAL;
C_TIME 
--------------------------------
13-jun-2017 04:26:10 AM 
1 row selected.

Sau đó, bạn nên đặt múi giờ thành cục bộ. Chạy lệnh Alter Session sau để khôi phục múi giờ:

ALTER SESSION SET time_zone = LOCAL;

Bây giờ, nếu bạn truy vấn như trên, bạn sẽ nhận được giờ địa phương hiện tại của quốc gia bạn.

Tôi đã tạo một hàm được lưu trữ cũng trong PL / SQL để lấy giờ địa phương của bất kỳ quốc gia nào bằng cách chuyển tên quốc gia làm tham số. Tuy nhiên, tên quốc gia của thông số phải từ danh sách tên quốc gia trong chế độ xem V $ TIMEZONE_NAMES. Dưới đây là chức năng:

CREATE OR REPLACE FUNCTION get_current_local_time (country_name IN VARCHAR2)
 RETURN VARCHAR2
IS
 CURSOR c_tz (p_country_name IN VARCHAR2)
 IS
 SELECT DISTINCT tzname, TZ_OFFSET (tzname) z_offset 
 FROM V$TIMEZONE_NAMES
 WHERE UPPER (tzname) = UPPER (p_country_name) AND ROWNUM = 1;

v_offset VARCHAR2 (100);
 vtime VARCHAR2 (100);
BEGIN
 FOR c IN c_tz (country_name)
 LOOP
 v_offset := c.z_offset;
 END LOOP;

EXECUTE IMMEDIATE 'Alter Session Set time_zone = '
 || CHR (39)
 || v_offset
 || CHR (39);

SELECT TO_CHAR (CURRENT_TIMESTAMP, 'dd-mon-yyyy HH:mi:ss PM')
 INTO vtime
 FROM DUAL;

/* restore local time for current session*/
 EXECUTE IMMEDIATE 'Alter Session Set time_zone = local';

RETURN (vtime);
EXCEPTION
 WHEN OTHERS
 THEN
 RETURN '';
END;
/

Bây giờ sử dụng nó như hình dưới đây:

SELECT get_current_local_time ('America/New_York') FROM DUAL;
C_TIME 
--------------------------------------------------------
13-jun-2017 04:33:05 AM 
1 row selected.
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng cơ sở dữ liệu Oracle với CakePHP 2.0

  2. Phiên không hoạt động trong Oracle của JDBC

  3. Ví dụ về mệnh đề WHEN của Oracle Trigger

  4. Phục hồi cơ sở dữ liệu Oracle

  5. Bắt đầu với Cơ sở dữ liệu tự trị của Oracle trên Đám mây