61

我有一个带有 bigint 类型字段的表。该字段存储时间戳。我想像这样对字段进行日期格式:

to_char(bigint_field,'DD/MM/YYYY HH24:MI:SS')

我收到以下错误:

错误:多个小数点
执行 SQL :42601
4

4 回答 4

114
TO_CHAR(TO_TIMESTAMP(bigint_field / 1000), 'DD/MM/YYYY HH24:MI:SS')
于 2011-03-30T11:13:01.017 回答
9

这对我有用

to_timestamp( bigint_field/1000)::date
于 2020-11-10T23:16:31.770 回答
5

这取决于 bigint 值代表什么 - 纪元时间的偏移量,或者不是。

select to_timestamp(20120822193532::text, 'YYYYMMDDHH24MISS')

返回

“2012-08-22 19:35:32+00”

于 2012-08-22T19:40:16.043 回答
2

我是这样做的:

to_timestamp(to_char(20120822193532, '9999-99-99 99:99:99'),'YYYY-MM-DD HH24:MI:SS')

结果如下所示:

2012-08-22 19:35:32

您也可以在选择声明时使用它,只需将数字与您的数据库列交换即可。

分步说明:

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;
于 2017-01-06T13:50:21.643 回答