Postgres - 将 dateString 转换为 int8

Posted

技术标签:

【中文标题】Postgres - 将 dateString 转换为 int8【英文标题】:Postgres - convert dateString to int8 【发布时间】:2021-12-17 19:34:03 【问题描述】:

如何在 PostgreSQL 12 中将此字符串转换为 int8?

2021-10-18T17:45:22Z

我试过了:

TO_TIMESTAMP('2021-10-18T17:45:22Z'::text,'YYYY-MM-DD hh:mm:ss ')::int8
to_char('2021-10-18T17:45:22Z', 'YYYY-MM-DD hh:mm:ss ')::integer

以及其中的一些变体,但没有任何成功。

输入字符串无法更改,因为它是由外部软件以这种方式传递的。

【问题讨论】:

那个整数应该是什么意思?除 SQLite 之外的所有数据库中的日期都是单独的二进制类型,而不是字符串。几乎所有语言也都有日期类型,因此没有理由将日期转换为其他类型 至于2021-10-18T17:45:22Z,这不仅仅是一个日期,它是一个带有偏移量的日期。这代表每个时区的不同时间。删除偏移量会丢失重要信息 @PanagiotisKanavos 最后的 Z 代表祖鲁时区,即 UTC。所以它可以安全地省略,因为时间戳默认存储在 UTC 中 @Patrick 我知道这意味着什么,以及这些默认值如何不是真的。检查Falsehoods programmers believe about time 【参考方案1】:

你没有告诉我们整数值应该代表什么。这里的一种通用方法是使用 UNIX 时间戳。例如:

SELECT EXTRACT(epoch FROM '2021-10-18 17:45:22'::timestamp);  -- 1634579122

1634579122 的值是自 1970 年 1 月 1 日以来经过的秒数。

【讨论】:

你说得对,我不想提。 unix 时间戳正是我所需要的。谢谢 @sharkyenergy 为什么需要它?日期是几乎所有数据库和语言中的内置类型。使用正确的类型实际上比 Unix 时间戳(什么时区?什么精度?)等模棱两可的东西更安全、更便携。 @PanagiotisKanavos 我得到的数据库(不是由我管理)的日期保存为 int8...

以上是关于Postgres - 将 dateString 转换为 int8的主要内容,如果未能解决你的问题,请参考以下文章

前端转日期格式

关于java时间戳转换的疑问,求大神指导

JS字符串类型转日期然后进行日期比较

判断当前日期在一个时间段日期中

matlab如何将一个cell转换成数值型或字符串型

matlab如何将一个cell转换成数值型或字符串型