sql >> データベース >  >> RDS >> Oracle

PL/SQLで任意の国の現在の現地時間を取得

    通常、私たちはGoogleを使用して、どの国の現在の現地時間をチェックしていました。この投稿では、PL/SQLで任意の国の現在の現地時間を取得する方法の例を示しています。 国名のリストはV$TIMEZONE_NAMESから入手できます。 Oracleで表示します。この辞書ビューを使用して国の名前を取得し、TZ_OFFSET関数を使用してタイムゾーン値を取得しています 特定の国向け。

    国名とタイムゾーンの値を取得したら、[セッションの変更]コマンドを使用して、現在のセッションのタイムゾーンを設定できます。その後、 Current_Timestampを取得して、その国の現在の現地時間を取得できます 。以下に、例を段階的に示します。

    次に、以下の例に示すように、TZ_OFFSET関数を使用してV $ TIMEZONE_NAMESビューにクエリを実行し、国名とそのタイムゾーンを確認します。

     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

    さて、あなたがニューヨークの現在の現地時間は何であるかを知りたいのなら。次に、ニューヨークのタイムゾーン値である-04:00を指定して次のAlterSessionコマンドを実行します。以下に示すように:

    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.

    その後、タイムゾーンをローカルに設定する必要があります。次のAlterSessionコマンドを実行して、タイムゾーンを復元します。

    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. Oracle UTL_HTTP Post Multipart / Form-Data(JSON&ZIP)の例

    2. PHPを使用してサーバーに画像をアップロードするときに、他の情報とともにファイル名をデータベースに保存するにはどうすればよいですか?

    3. ひねりを加えたヘカトン:メモリ内TVP –パート1

    4. 文字列値1、2をOracleクエリへの入力として渡すことができません