在 PostgreSQL 中将字符串转换为日期和时间

Casting a string to Date and Time in PostgreSQL

我在 GreenPlum (PostgreSQL) 中有一个 table,所有字段都是 sting,我想编辑类型:

为此,我创建了一个视图:

CREATE VIEW typed_view AS

SELECT CAST(sid AS bigint), CAST(gid AS bigint),

...

但是我的日期和时间字段有问题,我试过这个命令但没有用:

 to_utc_timestamp(from_unixtime(unix_timestamp(eventdatetime,"yyyy-MM-dd

HH:mm:ss")),'UTC') AS eventdatetime,

之后我尝试了 PostgreSQL 表示法:

to_timestamp(eventdatetime, 'YYYY Mon DD HH24 MI SS') AS eventdatetime,

但还是不行。

有人知道怎么转换吗?

我也有这个命令不起作用:

CASE WHEN fix = "True" THEN TRUE ELSE FALSE END AS fix,

提前致谢

您没有提供示例数据,因此我假设您的数据类似于 "YYYY Mon DD HH24 MI SS"。因此,2016 年 1 月 4 日 2:15:20 下午在您的数据中看起来像“2016 年 1 月 4 日 14 15 20”。因此,对于此示例数据,转换将如下所示:

gpadmin=# select to_timestamp('2016 Jan 04 14 15 20', 'yyyy mon dd hh24 mi ss') as col1;
          col1          
------------------------
 2016-01-04 14:15:20-05
(1 row)

现在这是一个时间戳,其中还包括时区偏移量,对于我的服务器来说是 -5。要将其转换为没有时区的时间戳,您只需添加 ::timestamptz.

gpadmin=# select to_timestamp('2016 Jan 04 14 15 20', 'yyyy mon dd hh24 mi ss')::timestamp as col1;
        col1         
---------------------
 2016-01-04 14:15:20
(1 row)

对此非常重要的说明。将数据从字符串转换为不同的数据类型的成本很高。这在所有数据库中也是一样的。最好一次性承担这种转换的费用​​,而不是对每个 SELECT 语句都这样做。因此,我还建议您将此转换具体化为物理 table 而不是使用 VIEW。