我已经将一个名为staging的表导入到我的PostgreSQL数据库中.时间数据作为格式为2020-01-31T00:01:59Z的文本列timestamp存储在该表中.我知道这个数据是UTC的,尽管这个信息在文本字符串中并不明确.我想将此信息存储在带有时区的时间戳列中,但我找不到一种方法来告诉PostgreSQL此数据是UTC格式的.

如果我运行一个简单的to_timestamp(),数据被假定为在我的本地时间.例如,请参阅此调用:

    SELECT timestamp AS textoriginal, 
       to_timestamp(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') AS to_timestamp,
       to_timestamp(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"') AT TIME ZONE 'UTC' AS perceivedutc  
    FROM staging 
    LIMIT 5
|textoriginal        |to_timestamp            |perceivedutc            |
|--------------------|------------------------|------------------------|
|2015-12-11T11:00:43Z|Dec 11 2015 11:00:43 +01|Dec 11 2015 10:00:43    |
|2015-12-11T11:08:38Z|Dec 11 2015 11:08:38 +01|Dec 11 2015 10:08:38    |
|2015-12-11T11:12:19Z|Dec 11 2015 11:12:19 +01|Dec 11 2015 10:12:19    |
|2015-12-11T11:16:24Z|Dec 11 2015 11:16:24 +01|Dec 11 2015 10:16:24    |
|2015-12-11T11:20:30Z|Dec 11 2015 11:20:30 +01|Dec 11 2015 10:20:30    |

如何向PostgreSQL声明此字符串为UTC格式?

推荐答案

输入时间戳2020-01-31T00:01:59Z在UTC时区,因此,您只需创建类型为timestamptz的相应列.Postgres会相应地存储它.下面的查询将转换为带有时区的时间戳

SELECT timestamp::timestamptz AS perceivedutc FROM staging LIMIT 5

Sql相关问答推荐

SQL更新,在2个额外的表上使用内部连接

用于平均多个数据并与一个数据点进行比较以判断偏移量的SQL查询

SQL使最终结果显示两个表后的所有数据(匹配和不匹配)?

如何连接第二个表并将其内容输入到第一个表的单个字段中?

在SQL查询中使用COALESS

DBeaver将过程中的属性列表转换为字符串

如何将`now()`作为SQL插入语句的一部分?

SQL:查询作为子查询或CTE写入的最大和数失败

提取连续时间戳范围的SQL

postgres中的条件索引和触发器

如何在T-SQL中编写row_number的WHERE子句?

在 SQL Server 中合并两个 XML 列

使用临时表判断记录是否存在 - 如果存在则执行相同的操作

在 MS Access VBA 中,如何测量显示查询的时间?

以 15 分钟为间隔的使用情况SQL 查询

面对来自以下两个代码的不同输出

在 SQL 的每行选项中 Select 最大值

sql count distinct by column 和 sum false 和 true

Select 随机行,使得列子组的组合是唯一的

聚合 Athena 中的列