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

タイムゾーンなしで文字列をタイムスタンプに変換する方法

    timestampの文字列表現 (=timestamp without time zone )ロケール設定によって異なります。したがって、データエラーやPostgresによる例外の発生につながるあいまいさを回避するには、次の2つのオプションがあります。

    1。) ISO8601形式を使用する 、 anyでも同じように機能します ロケールまたはDateStyle 設定:

    '2013-08-20 14:52:49'
    

    ユースケースによっては、コンテキストからデータ型を導出できない場合に、文字列リテラルを明示的にキャストする必要がある場合があります。

    '2013-08-20 14:52:49'::timestamp
    

    2。) 文字列をtimestampに変換します to_timestamp()を使用する テンプレートパターンが一致する場合:

    to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')
    

    これはtimestamptzを返します 、現在のタイムゾーン設定を想定しています。通常(アサインメントのように)、タイプはそれに応じて強制されます。 timestampの場合 、これは、時間オフセットが切り捨てられ、期待値が得られることを意味します。ここでも、ターゲットタイプをコンテキストから導出できない場合は、明示的にキャストする必要があります。

    to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss')::timestamp
    

    それは単に時間オフセットを取り除くので、期待値になります。または、AT TIME ZONEを使用します 選択したタイムゾーンで構成します:

    to_timestamp('20/8/2013 14:52:49', 'DD/MM/YYYY hh24:mi:ss') AT TIME ZONE 'UTC'
    

    目標のタイムゾーンは現在のtimezoneと同じですが 設定すると、変換は行われません。それ以外の場合、結果のタイムスタンプはそれに応じて置き換えられます。さらに読む:

    • RailsとPostgreSQLでタイムゾーンを完全に無視する


    1. SQL ServerにLastIndexOfはありますか?

    2. SELECT ... FORUPDATEを使用する場合

    3. MySQLでテーブルの名前を変更する方法

    4. Microsoft Access 2010、2013、2016、および2019チュートリアル