如何将 bigint 字段格式化为 Postgresql 中的日期?

Posted

技术标签:

【中文标题】如何将 bigint 字段格式化为 Postgresql 中的日期?【英文标题】:How to format bigint field into a date in Postgresql? 【发布时间】:2011-07-26 00:34:28 【问题描述】:

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

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

我收到以下错误:

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

【问题讨论】:

【参考方案1】:

这对我有用

to_timestamp( bigint_field/1000)::date

【讨论】:

【参考方案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(时间戳 with 时区)而不是 timestamp(时间戳 >没有时区)。你可以这样改变它:

ALTER TABLE table2 ALTER realDate SET DATA TYPE timestamp USING realDate;

【讨论】:

【参考方案3】:

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

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

返回

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

【讨论】:

【参考方案4】:
TO_CHAR(TO_TIMESTAMP(bigint_field / 1000), 'DD/MM/YYYY HH24:MI:SS')

【讨论】:

@Stephan:或者,或者更可能的是,您存储的不是UNIX 时间戳。您能否发布一个bigint_field 的值以及您认为它应该对应的日期? [BIGINT] - 1301486917594 大致等于 2011-03-30 14:08:37,594 @Stephan:似乎您正在存储自 1970 以来的毫秒数。查看帖子更新。

以上是关于如何将 bigint 字段格式化为 Postgresql 中的日期?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Freemarker 将 CRM“仅日期”字段格式化为字符串?

如何使用 ISO 8601 格式的 DateTime 字段将 JSON 文本反序列化为 BsonDocument?

如何使用 jOOQ gradle 插件将 postgres 中的 bigint[] 字段转换为类字段

使用 Laravel 资源将字段数据格式化为字典

jQuery UI Datepicker 将备用字段填充并格式化为 MySQL 日期

AJAX 调用以检索 JSON - 如何将结果格式化为屏幕