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でタイムゾーンを完全に無視する