bigint型のフィールドを持つテーブルがあります。このフィールドにはタイムスタンプが格納されます。次のようにフィールドの日付をフォーマットしたい:
to_char(bigint_field、'DD / MM / YYYY HH24:MI:SS')
次のエラーが発生します:
エラー:小数点が複数あります ÉtatSQL:42601
bigint型のフィールドを持つテーブルがあります。このフィールドにはタイムスタンプが格納されます。次のようにフィールドの日付をフォーマットしたい:
to_char(bigint_field、'DD / MM / YYYY HH24:MI:SS')
次のエラーが発生します:
エラー:小数点が複数あります ÉtatSQL:42601
TO_CHAR(TO_TIMESTAMP(bigint_field / 1000), 'DD/MM/YYYY HH24:MI:SS')
これは私のために働いたものです
to_timestamp( bigint_field/1000)::date
これは、bigint値が何を表すか(エポック時間のオフセットかどうか)によって異なります。
select to_timestamp(20120822193532::text, 'YYYYMMDDHH24MISS')
戻り値
"2012-08-22 19:35:32 + 00"
私はこのようにしました:
to_timestamp(to_char(20120822193532, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS')
結果は次のようになります。
2012-08-22 19:35:32
また、これを使用して、statemantを選択し、データベース列と番号を交換することもできます。
ステップバイステップの説明:
to_char(20120822193532, '9999-99-99 99:99:99')
これにより、次のような文字列が作成されます。
"2012-08-22 19:35:32"
これで、これをタイムスタンプに簡単に変換できます。
to_timestamp('2012-08-22 19:35:32','YYYY-MM-DD HH24:MI:SS')
結果は以前と同じように見えますが、タイムスタンプになりました。
また、これを次のようなコマンドに使用する場合
CREATE TABLE table2 AS SELECT to_timestamp(to_char(tb1.date, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS') AS realDate FROM table1 AS tb1;
タイムスタンプ(タイムゾーンのないタイムスタンプ)ではなく、timstamptz(タイムゾーンのあるタイムスタンプ)になってしまう可能性があります。次のように変更できます。
ALTER TABLE table2 ALTER realDate SET DATA TYPE timestamp USING realDate;