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

サーバーのタイムゾーンオフセット値

    タイムゾーンについては、次のことができます。

    SHOW timezone;
    

    または同等のもの:

    SELECT current_setting('TIMEZONE');
    

    ただし、これはサーバーが受け入れる任意の形式にすることができるため、UTCを返す場合があります。 、08:00Australia/Victoria 、または同様のもの。

    苛立たしいことに、クライアントが使用しているUTCからの時間オフセットを時間と分で報告する組み込み関数がないように見えます。これは私にはちょっと狂気のようです。 UTCの現在の時刻をローカルの現在の時刻と比較することで、オフセットを取得できます。

    SELECT age(current_timestamp AT TIME ZONE 'UTC', current_timestamp)`
    

    ...しかしIMOは、current_timestampから秒単位でtzオフセットを抽出する方がクリーンです。 間隔に変換します:

    SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
    

    これは、先行ゼロを生成しないことを除いて、目的の結果と一致するため、-05:00 ただ-5:00 。迷惑なことに、to_charを取得することは不可能のようです 何時間も先行ゼロを生成し、次の醜い手動フォーマットを残します:

    CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
    SELECT to_char(extract(timezone_hour FROM current_timestamp),'FM00')||':'||
           to_char(extract(timezone_minute FROM current_timestamp),'FM00');
    $$ LANGUAGE 'SQL' STABLE;
    

    timezone_hourのGlennへのクレジット およびtimezone_minute 以前に使用したハックの代わりに、extract(timezone from current_timestamp) * INTERVAL '1' second) とCTE。

    先行ゼロが必要ない場合は、代わりに次を使用できます:

    CREATE OR REPLACE FUNCTION oracle_style_tz() RETURNS text AS $$
    SELECT to_char(extract(timezone from current_timestamp) * INTERVAL '1' second, 'FMHH24:MM');
    $$ LANGUAGE 'SQL' STABLE;
    

    参照:



    1. Python、postgresqlでのデータベーステスト

    2. Select(PostgreSQL / pgAdmin)でブール値をTRUEまたはFALSEとして返します

    3. PHPで2つの日付の間の日数を計算する方法は?

    4. トリガーはクエリアトミックに基づいていますか?