在 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。
我在 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。