【问题标题】:Postgres - convert dateString to int8Postgres - 将 dateString 转换为 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

标签: postgresql datetime type-conversion epoch


【解决方案1】:

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

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

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

【讨论】:

  • 你说得对,我不想提。 unix 时间戳正是我所需要的。谢谢
  • @sharkyenergy 为什么需要它?日期是几乎所有数据库和语言中的内置类型。使用正确的类型实际上比 Unix 时间戳(什么时区?什么精度?)等模棱两可的东西更安全、更便携。
  • @PanagiotisKanavos 我得到的数据库(不是由我管理)的日期保存为 int8...
猜你喜欢
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 2018-10-21
  • 2020-08-14
  • 1970-01-01
相关资源
最近更新 更多