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的主要内容,如果未能解决你的问题,请参考以下文章