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

make_timestamptz()がPostgreSQLでどのように機能するか

    PostgreSQLでは、make_timestamptz() 関数を使用すると、タイムゾーン付きのタイムスタンプを作成できます 年、月、日、時、分、秒のフィールド、およびオプションのタイムゾーンフィールドから。

    構文

    この関数の構文は次のとおりです。

    make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ])

    yearmonth 、およびday 日付の年、月、日を表す整数、およびhour 時間の部分、min は分の部分であり、sec 秒の部分です。

    時間と分は整数として提供されます 、秒は倍精度として提供されます 。

    オプションのtimezone 引数はタイムゾーン用です。指定されていない場合は、現在のタイムゾーンが使用されます。

    結果はタイムゾーンのある時間として返されます 。

    これがデモンストレーションの基本的な例です。

    SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15);

    結果:

    1999-03-14 10:35:12.15+10

    この場合、タイムゾーンを指定しなかったため、現在のタイムゾーンを使用しました。

    次のクエリで返品タイプを確認できます。

    SELECT pg_typeof(make_timestamptz(1999, 03, 14, 10, 35, 12.15));

    結果:

    timestamp with time zone

    pg_typeof() 関数は引数のデータ型を返すので、make_timestamptz()を渡しました 引数として。

    タイムゾーンを指定する

    この例では、タイムゾーンを明示的に指定しています。

    SELECT make_timestamptz(1999, 03, 14, 10, 35, 12.15, 'Indian/Mauritius');

    結果:

    1999-03-14 16:35:12.15+10

    別の例を示しますが、さまざまなタイムゾーン値を使用しています。

    \x
    SELECT 
      make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACDT'),
      make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACST'),
      make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'ACT'),
      make_timestamptz(2000, 01, 01, 00, 01, 00.00, '+01'),
      make_timestamptz(2000, 01, 01, 00, 01, 00.00, '-01'),
      make_timestamptz(2000, 01, 01, 00, 01, 00.00, 'NZ');

    結果(垂直出力を使用):

    make_timestamptz | 1999-12-31 23:31:00+10
    make_timestamptz | 2000-01-01 00:31:00+10
    make_timestamptz | 2000-01-01 15:01:00+10
    make_timestamptz | 2000-01-01 09:01:00+10
    make_timestamptz | 2000-01-01 11:01:00+10
    make_timestamptz | 1999-12-31 21:01:00+10

    この例では、\xを使用しました 結果を読みやすくするために、拡張表示(「垂直出力」とも呼ばれます)を有効にします。

    \xと入力します 拡張表示を切り替えます(つまり、有効または無効にします)。

    有効なタイムゾーンのリストを取得するには、PostgreSQLでサポートされているタイムゾーンのリストを返すを参照してください。

    範囲外

    いずれかの引数が日付部分の可能な値の範囲外である場合、「範囲外」エラーが発生します。

    SELECT make_timestamptz(1999, 03, 32, 10, 35, 12.15);

    結果:

    ERROR: date field value out of range: 1999-03-32

    この場合、日は32であり、範囲外であるため、メッセージは日付フィールドの値が範囲外であることを説明しました。

    時間フィールドの値のみが範囲外の場合、エラーはそれに応じて表現されます。

    SELECT make_timestamptz(1999, 03, 30, 10, 61, 12.15);

    結果:

    ERROR: time field value out of range: 10:61:12.15

    この場合、minutes 引数は61で、範囲外です。

    タイムゾーンのないタイムスタンプ

    タイムゾーンなしでタイムスタンプを作成するには、make_timestamp()を使用します 機能。


    1. PostgreSQLで小数点から末尾のゼロを削除する方法

    2. SQL Serverで複合外部キーを作成する方法(T-SQLの例)

    3. SQL Server Management Studio(SSMS)で複数のクエリと結果を並べて表示する方法-SQL Server/TSQLチュートリアルパート14

    4. 複数のID値を受け入れるT-SQLストアドプロシージャ