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

PostgreSQLでサポートされているタイムゾーンのリストを返す

    PostgreSQLを使用しているときに、Postgresが認識するタイムゾーンのリストが必要な状況に陥ることがあります。

    たとえば、現在のセッションのタイムゾーンを設定しようとしている場合や、タイムゾーンを操作できる日時関数の1つを使用している場合があります。

    以下は、タイムゾーンのリストを返す2つのビューと2つの関数です。

    pg_timezone_abbrevsビュー

    pg_timezone_abbrevs ビューは、日時関数によって現在認識されているタイムゾーンの省略形のリストを提供します。

    上位10行は次のようになります。

    SELECT * 
    FROM pg_timezone_abbrevs
    LIMIT 10;

    結果:

    abbrev  | utc_offset | is_dst
    --------+------------+--------
    ACDT    | 10:30:00   | t
    ACSST   | 10:30:00   | t
    ACST    | 09:30:00   | f
    ACT     | -05:00:00  | f
    ACWST   | 08:45:00   | f
    ADT     | -03:00:00  | t
    AEDT    | 11:00:00   | t
    AESST   | 11:00:00   | t
    AEST    | 10:00:00   | f
    AFT     | 04:30:00   | f

    is_dst 列は、これが夏時間の略語であるかどうかを示します。

    timezone_abbreviationsを実行すると、このビューの内容が変わることに注意してください。 実行時パラメータが変更されます。

    また、Postgresのドキュメントには次のように記載されていることに注意してください。

    ほとんどのタイムゾーンの略語はUTCからの固定オフセットを表しますが、歴史的に値が変化しているものもあります(詳細についてはセクションB.4を参照してください)。このような場合、このビューは現在の意味を示します。

    pg_timezone_abbrevs()関数

    または、pg_timezone_abbrevs()を使用することもできます 結果をSETOFとして返す関数。

    SELECT pg_timezone_abbrevs()
    LIMIT 10;

    結果:

    pg_timezone_abbrevs
    -------------------
    (ACDT,10:30:00,t)
    (ACSST,10:30:00,t)
    (ACST,09:30:00,f)
    (ACT,-05:00:00,f)
    (ACWST,08:45:00,f)
    (ADT,-03:00:00,t)
    (AEDT,11:00:00,t)
    (AESST,11:00:00,t)
    (AEST,10:00:00,f)
    (AFT,04:30:00,f)

    必要に応じて、次の構文を使用して結果を別の列に返すこともできます。

    SELECT * 
    FROM pg_timezone_abbrevs()
    LIMIT 10;

    結果:

    abbrev  | utc_offset | is_dst
    --------+------------+--------
    ACDT    | 10:30:00   | t
    ACSST   | 10:30:00   | t
    ACST    | 09:30:00   | f
    ACT     | -05:00:00  | f
    ACWST   | 08:45:00   | f
    ADT     | -03:00:00  | t
    AEDT    | 11:00:00   | t
    AESST   | 11:00:00   | t
    AEST    | 10:00:00   | f
    AFT     | 04:30:00   | f

    pg_timezone_namesビュー

    pg_timezone_names ビューは、SET TIMEZONEによって認識されるタイムゾーン名のリストを提供します 、関連する略語、UTCオフセット、および夏時間のステータスとともに。

    上位10行は次のようになります。

    SELECT * 
    FROM pg_timezone_names
    LIMIT 10;

    結果:

           name              | abbrev | utc_offset | is_dst 
    ------------------+--------+------------+--------
     Indian/Mauritius  | +04    | 04:00:00   | f
     Indian/Chagos     | +06    | 06:00:00   | f
     Indian/Mayotte    | EAT    | 03:00:00    | f
     Indian/Christmas  | +07    | 07:00:00    | f
     Indian/Cocos      | +0630  | 06:30:00    | f
     Indian/Maldives   | +05    | 05:00:00    | f
     Indian/Comoro     | EAT    | 03:00:00    | f
     Indian/Reunion    | +04    | 04:00:00    | f
     Indian/Mahe       | +04    | 04:00:00    | f
     Indian/Kerguelen  | +05    | 05:00:00    | f
    

    is_dst 列は、タイムゾーンが現在夏時間を採用しているかどうかを示します。

    このビューについて、Postgresのドキュメントには次のように記載されています。

    pg_timezone_abbrevsに示されている略語とは異なります 、これらの名前の多くは、夏時間の移行日ルールのセットを意味します。したがって、関連する情報はローカルDSTの境界を越えて変化します。表示される情報は、CURRENT_TIMESTAMPの現在の値に基づいて計算されます 。

    pg_timezone_names()関数

    pg_timezone_names()を使用することもできます 結果をSETOFとして返す関数。

    SELECT pg_timezone_names()
    LIMIT 10;

    結果:

    pg_timezone_names
    ---------------------------------
    (Indian/Mauritius,+04,04:00:00,f)
    (Indian/Chagos,+06,06:00:00,f)
    (Indian/Mayotte,EAT,03:00:00,f)
    (Indian/Christmas,+07,07:00:00,f)
    (Indian/Cocos,+0630,06:30:00,f)
    (Indian/Maldives,+05,05:00:00,f)
    (Indian/Comoro,EAT,03:00:00,f)
    (Indian/Reunion,+04,04:00:00,f)
    (Indian/Mahe,+04,04:00:00,f)
    (Indian/Kerguelen,+05,05:00:00,f)

    次の構文を使用して、結果を別々の列に返すこともできます。

    SELECT * FROM pg_timezone_names()
    LIMIT 10;

    結果:

    name              | abbrev | utc_offset | is_dst 
    ------------------+--------+------------+--------
    Indian/Mauritius  | +04    | 04:00:00   | f
    Indian/Chagos     | +06    | 06:00:00   | f
    Indian/Mayotte    | EAT    | 03:00:00   | f
    Indian/Christmas  | +07    | 07:00:00   | f
    Indian/Cocos      | +0630  | 06:30:00   | f
    Indian/Maldives   | +05    | 05:00:00   | f
    Indian/Comoro     | EAT    | 03:00:00   | f
    Indian/Reunion    | +04    | 04:00:00   | f
    Indian/Mahe       | +04    | 04:00:00   | f
    Indian/Kerguelen  | +05    | 05:00:00   | f

    1. SQLデータ型の概要

    2. TIME()の例– MySQL

    3. 文字列の制約をチェックして、数字のみを含めます。 (Oracle SQL)

    4. ユーザーごとのOracle設定デフォルトスキーム(セッションを変更しない)