web-dev-qa-db-ja.com

日付と時刻の列を連結してタイムスタンプを取得します

データベースに曜日と時間のフィールドがあります。日時を連結してタイムスタンプを取得したい。 PostgreSQLでこれを行う方法は?

私はこれをしました:

SELECT EXTRACT(Epoch FROM TIMESTAMP '2011-05-17 10:40:28');

そして、それはうまく機能しています。

しかし、日と時間のフィールドを置き換えようとすると、次のエラーが発生します。

SELECT EXTRACT(Epoch FROM TIMESTAMP Day || ' ' || Time);
ERROR:  syntax error at or near "Day"
LINE 1: ...quest_count > 0 AND (EXTRACT(Epoch FROM TIMESTAMP Day || ' ' || Time)) > (e...
14
Yasitha
SELECT EXTRACT(Epoch FROM (Day || ' ' || Time)::timestamp);
16
Clodoaldo Neto

dateおよびtimeタイプ

Dayのタイプが date およびTimeの場合タイプが time の場合、非常に簡単な解決策があります。

_SELECT EXTRACT(Epoch FROM (day + time));
_

datetimeを追加するだけで、_timestamp [without time zone]_(セッションのタイムゾーン設定に従って解釈されます)を取得できます。

そして、厳密に言えば、エポックを抽出すること自体はあなたの質問とは無関係です。
date + timeの結果はtimestampになり、それだけです。

文字列タイプ

文字列リテラルまたはtext/varchar列について話している場合は、次を使用します。

_SELECT EXTRACT(Epoch FROM ('2013-07-18' || ' ' || '21:52:12')::timestamp);
_

または

_SELECT EXTRACT(Epoch FROM cast('2013-07-18' ||' '|| '21:52:12' AS timestamp));
_

あなたのフォームは機能しません

SELECT EXTRACT(Epoch FROM TIMESTAMP ('2013-07-18' || ' ' || '21:52:12'));

これはうまくいくでしょう:

_SELECT EXTRACT(Epoch FROM "timestamp" ('2013-07-18' || ' ' || '21:52:12'));
_

私は引用します 型キャストに関するマニュアル

関数のような構文を使用して型キャストを指定することもできます。

typename ( expression )

ただし、これは、名前が関数名としても有効なタイプに対してのみ機能します。たとえば、_double precision_はこの方法では使用できませんが、同等の_float8_は使用できます。また、名前intervaltime、およびtimestampは、二重引用符で囲まれている場合にのみこの方法で使用できます、構文の競合のため。したがって、関数のようなキャスト構文を使用すると、不整合が発生するため、おそらく回避する必要があります。

大胆な強調鉱山。
その要点:最初の2つの構文バリアントのいずれかを使用してください。

15

これは私にとってはうまくいきます:

SELECT CONCAT(Day,' ',Time)::timestamp;
0
HydrUra