Oracle
 sql >> база данни >  >> RDS >> Oracle

Вземете текущото местно време на всяка държава в PL/SQL

Обикновено използвахме Google, за да проверим текущото местно време на която и да е държава. В тази публикация давам пример как можете да получите текущо местно време на която и да е държава в PL/SQL. Можете да получите списъка с имена на държави чрез V$TIMEZONE_NAMES преглед в Oracle. Използвам този изглед на речника, за да получа имената на държавата и използвам функцията TZ_OFFSET за получаване на стойността на часовата зона за конкретна държава.

След като получите името на държавата и стойността на часовата зона, можете да използвате командата Alter Session, за да зададете часова зона на текущата сесия. След това можете да получите Current_Timestamp, за да получите текущото местно време на тази държава . По-долу давам пример стъпка по стъпка.

Първо потърсете изгледа V$TIMEZONE_NAMES, като използвате функцията TZ_OFFSET, за да проверите имената на държавите и часовата им зона, както е показано в примера по-долу:

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

Ще получите около 577 реда, нещо като по-долу:

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

Сега, ако искате да знаете какво е текущото местно време в Ню Йорк. След това изпълнявате следната команда Alter Session със стойност на часовата зона на Ню Йорк, която е -04:00. Както е показано по-долу:

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

След това направете заявка по-долу, за да получите текущото местно време за Ню Йорк.

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.

След това трябва да зададете часовата зона на локална. Изпълнете следната команда Alter Session, за да възстановите часовата зона:

ALTER SESSION SET time_zone = LOCAL;

Сега, ако направите заявка, както по-горе, ще получите текущото местно време на вашата страна.

Създадох съхранена функция също в PL/SQL, за да получа местното време на която и да е държава, като предам името на държавата като параметър. Но името на държавата на параметъра трябва да е от списъка с имена на държави в V$TIMEZONE_NAMES изглед. По-долу е функцията:

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;
/

Сега го използвайте, както е показано по-долу:

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. разлика между NLS_NCHAR_CHARACTERSET и NLS_CHARACTERSET за Oracle

  2. Как да намеря първите три най-високи заплати в таблицата emp в oracle?

  3. ADDM на SearchOracle.com

  4. Фонови процеси

  5. Множество функция REPLACE в Oracle