Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Uzyskaj aktualny czas lokalny dowolnego kraju w PL/SQL

Zwykle robiliśmy Google, aby sprawdzić aktualny czas lokalny dowolnego kraju. W tym poście podaję przykład, w jaki sposób można uzyskać aktualny czas lokalny dowolnego kraju w PL/SQL. Możesz uzyskać listę nazw krajów przez V$TIMEZONE_NAMES widok w Oracle. Używam tego widoku słownika, aby uzyskać nazwy krajów i używam funkcji TZ_OFFSET, aby uzyskać wartość strefy czasowej dla danego kraju.

Po uzyskaniu nazwy kraju i wartości strefy czasowej możesz użyć polecenia Zmień sesję, aby ustawić strefę czasową bieżącej sesji. Następnie możesz uzyskać Current_Timestamp, aby uzyskać aktualny czas lokalny tego kraju . Poniżej podaję przykład krok po kroku.

Najpierw wyślij zapytanie do widoku V$TIMEZONE_NAMES za pomocą funkcji TZ_OFFSET, aby sprawdzić nazwy krajów i ich strefę czasową, jak pokazano w poniższym przykładzie:

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

Otrzymasz około 577 wierszy, jak poniżej:

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

Teraz, jeśli chcesz wiedzieć, jaki jest aktualny czas lokalny w Nowym Jorku. Następnie uruchamiasz następujące polecenie Alter Session z wartością Timezone New York, która wynosi -04:00. Jak pokazano poniżej:

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

Następnie zapytaj jak poniżej, aby uzyskać aktualny czas lokalny dla Nowego Jorku.

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.

Następnie należy ustawić strefę czasową na lokalną. Uruchom następujące polecenie Alter Session, aby przywrócić strefę czasową:

ALTER SESSION SET time_zone = LOCAL;

Teraz, jeśli zapytasz jak powyżej, otrzymasz aktualny czas lokalny w swoim kraju.

Stworzyłem funkcję przechowywaną również w PL/SQL, aby uzyskać czas lokalny dowolnego kraju, przekazując nazwę kraju jako parametr. Jednak nazwa kraju parametru powinna znajdować się na liście nazw krajów w widoku V$TIMEZONE_NAMES. Poniżej znajduje się funkcja:

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

Teraz użyj go, jak pokazano poniżej:

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. Zapytanie rekurencyjne w Oracle

  2. ODP.NET Oracle.ManagedDataAcess losowe błędy ORA-12570

  3. Karta sieciowa nie mogła nawiązać połączenia — Oracle 11g

  4. Co to są złącza Oracle (złącza SQL)?

  5. Plik zrzutu rdzenia i dodawanie kodów debugowania w aplikacji wykonywalnej dla aplikacji Oracle