2016-08-16 14 views
3

私は2つの列を持ちます.1つは "date"という名前で、もう1つは "time"という名前です。日付は日付データ型で、 "時刻"は文字データ型です。私は、これは正しいタイムスタンプを返しますが、「00」のタイムゾーンでタイムゾーンデータを格納するto_timestamp

新しい複合タイムスタンプ列を選択するために
SELECT 
    to_timestamp(concat_ws(' ',air_date,air_time),'yyyy-MM-dd HH24:MI:SS') as datetime 
FROM table1 

を次のクエリを使用しています。タイムゾーンが "EST5EDT"であることを明示的に伝えて、タイムゾーンの "+04"または "+05"のいずれかを取得します。私は、次のことを試してみましたが、私はそれに含まれるEST5EDTのタイムゾーン情報をタイムスタンプ列を選択するにはどうすればよい

SELECT 
    to_timestamp(concat_ws(' ',air_date,air_time,'EST5EDT'),'yyyy-MM-dd HH24:MI:SS TZ') as datetime 
FROM table1 

ERROR: "TZ"/"tz"/"OF" format patterns are not supported in to_date

SQL state: 0A000

エラーを受け取りましたか?

+0

これはうまくいかないでしょう。私がそれをすると、入力されたdatetimeが "UTC"であると仮定し、それを "EST5EDT"に変換するとしたらどうなりますか?入力時間を "EST5EDT"として解釈し、後で変換するにはpostgresが必要です。 – syang

+1

申し訳ありませんが、間違っていました。何らかの理由で 'to_timestamp'が'タイムゾーンなしのタイムスタンプ 'を返すと思います。しかし、あなたのフォーマットは[timstamp input](https://www.postgresql.org/docs/current/static/datatype-datetime.html#DATATYPE-DATETIME-INPUT)によってサポートされているので、 'concat_ws( ''、air_date、air_time、 'EST5EDT'):: timestamptz'。 – Abelisto

+0

これによれば、少なくとも「postgres 9.5」では「タイムゾーン付きタイムスタンプ」を返します。https://www.postgresql.org/docs/9.5/static/functions-formatting.html –

答えて

0

あなただけのタイムスタンプキャストにTZ夜を追加した場合、それは時間の適切な量を追加しますが:

t=# select 
    concat_ws(' ','2016-08-16'::date,'10:00:00'::time,'EST5EDT')::timestamptz 
, concat_ws(' ','2016-08-16'::date,'10:00:00'::time)::timestamptz; 
     concat_ws  |  concat_ws 
------------------------+------------------------ 
2016-08-16 14:00:00+00 | 2016-08-16 10:00:00+00 
(1 row) 

私は右のあなたを理解していれば、あなたは追加TZ「値」と同じ日付と時刻をしたいですか?次に、これは役に立ちます:

t=# set timezone = EST5EDT; 
SET 
t=# select 
    concat_ws(' ','2016-08-16'::date,'10:00:00'::time,'EST5EDT')::timestamptz 
, concat_ws(' ','2016-08-16'::date,'10:00:00'::time)::timestamptz; 
     concat_ws  |  concat_ws 
------------------------+------------------------ 
2016-08-16 10:00:00-04 | 2016-08-16 10:00:00-04 
(1 row) 
関連する問題