データベースに曜日と時間のフィールドがあります。日時を連結してタイムスタンプを取得したい。 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...
SELECT EXTRACT(Epoch FROM (Day || ' ' || Time)::timestamp);
date
およびtime
タイプDay
のタイプが date
およびTime
の場合タイプが time
の場合、非常に簡単な解決策があります。
_SELECT EXTRACT(Epoch FROM (day + time));
_
date
とtime
を追加するだけで、_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
_は使用できます。また、名前interval
、time
、およびtimestamp
は、二重引用符で囲まれている場合にのみこの方法で使用できます、構文の競合のため。したがって、関数のようなキャスト構文を使用すると、不整合が発生するため、おそらく回避する必要があります。
大胆な強調鉱山。
その要点:最初の2つの構文バリアントのいずれかを使用してください。
これは私にとってはうまくいきます:
SELECT CONCAT(Day,' ',Time)::timestamp;