テキストフィールド "presence_changed_at"があり、テキスト値、つまり'2014/12/17 08:05:28 +0000
。これをタイムスタンプに変換する必要があります。 postgreSQLには関数TO_TIMESTAMP()がありますが、redshiftではこれはサポートされていないようです。私は時間なしで日付を得ることができます
TO_DATE("presence_changed_at",'YYYY/MM/DD HH24:MI:SS')
生成する
2014-12-12
しかし、TIMESTAMP形式を取得する方法が見つかりません。
これを解決してくれてありがとう
副選択なしでredshiftのUNIX時間から日時を取得するのは驚くほど恐ろしいことです。ただし、これは可能です。
select timestamptz 'Epoch' + YOURTIME * interval '1 second'
cast(column as timestamp)
redshiftで私のために働いた。 http://devdocs.io/postgresql~9.4/sql-expressions#SQL-SYNTAX-TYPE-CASTS を参照してください
関数を変換してみてください:
convert(timestamp,presence_changed_at)
タイムスタンプにキャストできます。これは、1つを指定しなくても、かなりの数の適切なフォーマットをサポートします。
select '2014/12/17 08:05:28 +0000'::timestamp;
timestamp
---------------------
2014-12-17 08:05:28
select '2014-12-02T05:00:00'::timestamp;
timestamp
---------------------
2014-12-02 05:00:00
select '2014-12-02T05:00:00PM'::timestamp;
timestamp
---------------------
2014-12-02 17:00:00
TO_Timestamp("presence_changed_at",'YYYY/MM/DD HH24:MI:SS')
を使用して、目的の出力を取得してください
以下の機能は私にとって正しく機能しました...あなたに当てはまる方を使用してください...
cast(column_name as timestamp)
to_date(列名、 'MM/DD/YYYY HH24:MI:SS')
to_date(列名、 'MM/DD/YYYY HH12:MI:SS')
to_timestamp(column_name、 'MM/DD/YYYY HH24:MI:SS')
現在、to_timestampはredshiftでサポートされています。したがって、SQLクエリは機能するはずです。チェック http://docs.aws.Amazon.com/redshift/latest/dg/r_TO_TIMESTAMP.html
TO_TIMESTAMP(presence_changed_at,'YYYY/MM/DD HH24:MI:SS')
を使用すると、TIMESTAMPTZ
値が返されます。これは、::TIMESTAMP
を使用してTIMESTAMP
にキャストできます。
私は最近、日付と時刻の変数がVARCHARタイプのテキストとして格納されているデータベースで作業しました複数の異なる形式(質問しないでください...)、それをTIMESTAMPに変換する必要がありましたタイプ。 RedshiftにはTO_TIMESTAMP()
関数がないため、私はYiyu Jiaが彼の[ブログ] [1]で提案したトリックを使用しました。一言で言えば、秘訣は
たとえば、次のいずれかの形式の日付を持つmyDateという名前のフィールドを処理するスニペットは次のとおりです
かなり重いですが動作します。正規表現テストは、日付が特定の行で処理される形式に対応するかどうかをテストするために使用されます。 (これは、複数の可能な形式を処理する場合にのみ必要です)
TO_DATE()に送信する前にテキストの時間部分を削除し、追加された時間部分を抽出するために別の正規表現が使用されるため、「Feb 0 2013」の場合は少し複雑です(反対に、同じ目的で使用されるより単純なSUBSTRING()が反対になっています)。
... ,
CASE
-- Special date indicating "date not available": replaced by NULL
WHEN myDate = '31/12/9999 23:59:59' OR myDate = 'Dec 31 9999 11:59PM' THEN NULL
-- 'Feb 8 2013 10:06PM' case
WHEN myDate ~ '^[JFMASOND][a-z]{2}' THEN
CAST(TO_DATE(REGEXP_REPLACE(myDate , '\\s[0-9]{1,2}:[0-9]{2}[AP]M$', ''), 'Mon FMDD YYYY') || REGEXP_REPLACE(myDate , '[JFMASOND][a-z]{2}\\s+[0-9]{1,2}\\s+[0-9]{4}\\s+', ' ') AS TIMESTAMP)
-- '25/09/2007 16:21:00' case
WHEN myDate ~ '^[0-9]{2}/[0-9]{2}/[0-9]{4} ' THEN
CAST(TO_DATE(myDate , 'DD/MM/YYYY HH24:MI:SS') || SUBSTRING(myDate FROM 11) AS TIMESTAMP)
ELSE NULL
END AS MyNiceTimeStamp,
...
[1]: http://yiyujia.blogspot.com/2014/04/redshift-convert-integer-to-timestamp.html