2013-07-18 11 views
12

データベースに曜日と時刻のフィールドがあります。日時を連結してタイムスタンプを取得したい。どのように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... 
+0

正確なデータ型を提供するのを忘れました。 –

答えて

11
SELECT EXTRACT(EPOCH FROM (Day || ' ' || Time)::timestamp); 
12

datetime種類

あなたDayはタイプdateであり、あなたの場合Timeのタイプがtimeの場合、非常に単純な解決策があります。

SELECT EXTRACT(EPOCH FROM (day + time)); 

あなたは(あなたのセッションのタイムゾーン設定に従って解釈される)timestamp [without time zone]を取得するためにdatetimeを追加することができます。

厳密に言えば、エポックを抽出することは、あなたの質問自体とは無関係です。
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')); 

を私はthe manual about type castsを引用:

It is also possible to specify a type cast using a function-like syntax:

typename (expression)

However, this only works for types whose names are also valid as function names. For example, double precision cannot be used this way, but the equivalent float8 can. Also, the names interval , time , and timestamp can only be used in this fashion if they are double-quoted, because of syntactic conflicts. Therefore, the use of the function-like cast syntax leads to inconsistencies and should probably be avoided.

太字強調鉱山。
要点:最初の2つの構文バリアントの1つを使用します。

関連する問題