我在GreenPlum(PostgreSQL)中有一个表,其中所有字段都作为字符串,我想编辑类型:
为此,我创建了一个视图:
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 Jan 04 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语句都这样做。因此,我还建议您将这种转换具体化为物理表,而不要使用VIEW。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句